vjame

          優(yōu)化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數(shù)據(jù)加載中……

          工廠方法模式

          工廠方法模式
          工廠方法模式和簡單工廠模式在結(jié)構(gòu)上的不同是很明顯的。工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式把

          核心放在一個具體類上。工廠方法模式可以允許很多具體工廠類從抽象工廠類中將創(chuàng)建行為繼承下來,從而可以成為多個簡單工廠模式的綜合,進而推廣了簡單工廠模式。

          此模式涉及到抽象工廠角色(汽車廠),具體工廠角色(具體的汽車車間),抽象產(chǎn)品角色(汽車)以及具體產(chǎn)品角色(私車,公交巴士)。


          package com.strongit.factory;


          //抽象汽車
          interface Car{
              
          public void run();
              
          public void stop();
          }

          //奔馳汽車
          class Benz implements Car{
              
          public void run() {
                  System.out.println(
          "BMW run ");
              }

              
          public void stop() {
                  System.out.println(
          "BMW stop  ");
              }
          }

          //福特汽車
          class Ford implements Car{

              
          public void run() {
                  System.out.println(
          "Ford run ");
              }
              
          public void stop() {
                  System.out.println(
          "Ford stop ");
              }
              
          }

          //公交巴士
          class Bus implements Car{

              
          public void run() {

                  System.out.println(
          "Bus run ");
              }

              
          public void stop() {
                  
          // TODO Auto-generated method stub
                  System.out.println("Bus stop ");
              }
              
          }

          //迷你巴士
          class MinBus implements Car{

              
          public void run() {

                  System.out.println(
          "MinBus run ");
              }

              
          public void stop() {

                  System.out.println(
          "MinBus stop ");
              }
              
          }

          //抽象工廠 
          interface Abstractfactory{

          }

          //汽車工廠
          class CarFactory implements Abstractfactory{
              
          public Car getCar(String type){
                  Car c
          =null;
                  
          try {
                      c
          =(Car)Class.forName("com.strongit.factory."+type).newInstance();
                  } 
          catch (InstantiationException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IllegalAccessException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (ClassNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  
          return c;
              }
          }

          //巴士工廠
          class BusFactory implements Abstractfactory{
              
          public Car getBus(String type){
                  Car c
          =null;
                  
          try {
                      
          //java反射機制
                      c=(Car)Class.forName("com.strongit.factory."+type).newInstance();
                  } 
          catch (InstantiationException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (IllegalAccessException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  } 
          catch (ClassNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  
          return c;
              }
          }

          //客服端調(diào)用
          public class FactoryDemo {

              
          public static void main(String[] args) {
                  
          //CarFactory cf=new CarFactory();
                  BusFactory bf=new BusFactory();
                  Car c
          =null;
                  
          //c=cf.getCar("Benz");
                  c=bf.getBus("MinBus");
                  c.run();
                  c.stop();
              }

          }

          /** 運行結(jié)果:
          MinBus run 
          MinBus stop 
           
          */


          posted on 2008-10-31 18:23 lanjh 閱讀(264) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 中西区| 定州市| 奉化市| 焉耆| 湘潭县| 安平县| 普陀区| 大洼县| 鄂伦春自治旗| 泸州市| 中牟县| 连平县| 莆田市| 青浦区| 加查县| 长岛县| 丽江市| 延津县| 伊宁市| 梓潼县| 和田市| 长岛县| 民勤县| 曲阳县| 高密市| 马山县| 陇川县| 武功县| 镇沅| 商洛市| 桃园县| 武山县| 个旧市| 彭州市| 昭通市| 鄄城县| 广灵县| 洱源县| 松滋市| 寿阳县| 永仁县|