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 閱讀(264) 評論(0)  編輯  收藏 所屬分類: 設計模式


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


          網站導航:
           
          主站蜘蛛池模板: 弥勒县| 彭泽县| 修文县| 枣强县| 陵水| 太谷县| 鄂托克旗| 翁源县| 故城县| 玛纳斯县| 项城市| 凤凰县| 封开县| 马尔康县| 鄂托克前旗| 响水县| 青州市| 东阳市| 来凤县| 高青县| 新余市| 托克逊县| 三亚市| 罗山县| 墨脱县| 保康县| 唐海县| 马山县| 伊吾县| 奉新县| 墨脱县| 收藏| 南汇区| 蓝山县| 奇台县| 玉林市| 姜堰市| 阿坝县| 临西县| 佳木斯市| 修水县|