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)  編輯  收藏 所屬分類: 設計模式


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


          網站導航:
           
          主站蜘蛛池模板: 台湾省| 宜丰县| 泽普县| 仙居县| 临颍县| 康平县| 灵川县| 晋城| 菏泽市| 唐海县| 容城县| 兴隆县| 德令哈市| 清苑县| 汉阴县| 巴林左旗| 滦南县| 吐鲁番市| 武安市| 林周县| 铜鼓县| 高尔夫| 淮阳县| 方山县| 梁平县| 房山区| 彭山县| 饶河县| 乌鲁木齐县| 上思县| 新巴尔虎右旗| 霍城县| 依兰县| 宜州市| 沙湾县| 景谷| 栾城县| 湘西| 夏河县| 临城县| 密云县|