爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          工廠方法模式

          Posted on 2009-01-20 17:24 非洲小白臉 閱讀(480) 評論(0)  編輯  收藏 所屬分類: 模式
          工廠方法模式應用場景舉例
          比如在玩“極品飛車”這款游戲,暈了吧,我喜歡極品飛車:),在玩這款游戲時,游戲者可以選擇從不同品牌來選擇賽車,那么這個“品牌”其實也就是工廠,每個工廠生產的賽車都不一樣,這就是典型的工廠方法的應用場景。

          工廠方法模式解釋
          類型:創建模式
            定義一個用于創建對象的接口,讓其子類來決定實例化哪一個類(產品),工廠方法使一個類的創建延遲到其子類中。

          工廠方法模式UML圖


          工廠方法模式-JAVA代碼實現
          新建賽車的接口:
          package car_interface;

          public interface Icar_interface {

              
          public void start();

              
          public void stop();

          }


          新建1個汽車信息的基類:

          package car_imple;

          import car_interface.Icar_interface;

          public class base_car_imple implements Icar_interface {

              
          private int speed;

              
          private String name;

              
          public int getSpeed() {
                  
          return speed;
              }

              
          public void setSpeed(int speed) {
                  
          this.speed = speed;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          public void start() {
                  
          // TODO Auto-generated method stub

              }

              
          public void stop() {
                  
          // TODO Auto-generated method stub

              }

          }


          新建奧迪汽車實現類:

          package car_imple;

          import car_interface.Icar_interface;

          public class car_audi_imple extends base_car_imple {

              
          public void start() {
                  System.out.println(
          this.getName() + " 車以專利技術起動了 最高速度為:"
                          
          + this.getSpeed());
              }

              
          public void stop() {
                  System.out.println(
          this.getName() + " 車以專利技術停車了");
              }

          }


          新建大眾汽車實現類:

          package car_imple;

          import car_interface.Icar_interface;

          public class car_3w_imple extends base_car_imple {

              
          public void start() {
                  System.out.println(
          this.getName() + " 車以專利技術起動了 最高速度為:"
                          
          + this.getSpeed());
              }

              
          public void stop() {
                  System.out.println(
          this.getName() + " 車以專利技術停車了");
              }

          }


          新建一個汽車工廠接口:

          package car_factory_interface;

          import car_interface.Icar_interface;

          public interface Icar_factory {

              
          public Icar_interface create_car();

          }


          新建一個創建奧迪車的汽車工廠實現類:

          package car_factory_imple;

          import car_factory_interface.Icar_factory;
          import car_imple.car_audi_imple;
          import car_interface.Icar_interface;

          public class audi_car_factory_imple implements Icar_factory {

              
          public Icar_interface create_car() {

                  car_audi_imple car_audi_imple_ref 
          = new car_audi_imple();
                  car_audi_imple_ref.setName(
          "奧迪A6");
                  car_audi_imple_ref.setSpeed(
          300);

                  
          return car_audi_imple_ref;
              }
          }


          新建一個創建大眾車的汽車工廠實現類:

          package car_factory_imple;

          import car_factory_interface.Icar_factory;
          import car_imple.car_3w_imple;
          import car_imple.car_audi_imple;
          import car_interface.Icar_interface;

          public class threeW_car_factory_imple implements Icar_factory {

              
          public Icar_interface create_car() {

                  car_3w_imple car_3w_imple_ref 
          = new car_3w_imple();
                  car_3w_imple_ref.setName(
          "大眾A6");
                  car_3w_imple_ref.setSpeed(
          400);

                  
          return car_3w_imple_ref;

              }

          }


          客戶端運行程序代碼:

          package run_main;

          import car_factory_imple.audi_car_factory_imple;
          import car_factory_interface.Icar_factory;
          import car_interface.Icar_interface;

          public class run_main {

              
          public static void main(String[] args) {

                  Icar_factory car_factory 
          = new audi_car_factory_imple();
                  Icar_interface car_ref 
          = car_factory.create_car();
                  car_ref.start();
                  car_ref.stop();

              }

          }


          程序運行結果如下:

          奧迪A6 車以專利技術起動了 最高速度為:300
          奧迪A6 車以專利技術停車了

          通過使用工廠方法模式就可以將對象的創建延遲到子類進行實例化,而且每個工廠創建不同的品牌的汽車,每個汽車的功能都有自己“專利”的實現,這樣可以將不同“品牌”的“汽車”的創建進行分類,有利于對象創建的清晰性。創建不同的汽車只需要改動這句代碼就可以了:
          Icar_factory car_factory = new audi_car_factory_imple();
          主站蜘蛛池模板: 阿克| 西和县| 陇南市| 区。| 驻马店市| 从化市| 渑池县| 蒙城县| 上饶县| 迁安市| 安泽县| 华池县| 勃利县| 吴江市| 建瓯市| 兴山县| 华容县| 雷波县| 西华县| 申扎县| 平利县| 阿勒泰市| 宣化县| 闻喜县| 剑河县| 江陵县| 延吉市| 萝北县| 灯塔市| 新源县| 渑池县| 呼图壁县| 德阳市| 镇赉县| 梁河县| 颍上县| 芦山县| 阿拉善右旗| 会泽县| 安西县| 磴口县|