vjame

          優化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數據加載中……

          工廠方法模式

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

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

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


          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;
              }
          }

          //客服端調用
          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();
              }

          }

          /** 運行結果:
          MinBus run 
          MinBus stop 
           
          */


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


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


          網站導航:
           
          主站蜘蛛池模板: 宁德市| 万源市| 宁波市| 鹤壁市| 高唐县| 祥云县| 黑水县| 镇赉县| 桃江县| 英吉沙县| 建水县| 唐海县| 资兴市| 上蔡县| 景洪市| 田林县| 铅山县| 桓台县| 漠河县| 清水河县| 军事| 炉霍县| 福鼎市| 澎湖县| 巧家县| 绍兴市| 嘉定区| 长武县| 孝义市| 紫金县| 红桥区| 建瓯市| 乌恰县| 淳安县| 五华县| 双柏县| 贺兰县| 页游| 鄂伦春自治旗| 中阳县| 辽阳市|