爪哇一角

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

          工廠方法模式

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

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

          工廠方法模式UML圖


          工廠方法模式-JAVA代碼實現(xiàn)
          新建賽車的接口:
          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

              }

          }


          新建奧迪汽車實現(xiàn)類:

          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() + " 車以專利技術(shù)起動了 最高速度為:"
                          
          + this.getSpeed());
              }

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

          }


          新建大眾汽車實現(xiàn)類:

          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() + " 車以專利技術(shù)起動了 最高速度為:"
                          
          + this.getSpeed());
              }

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

          }


          新建一個汽車工廠接口:

          package car_factory_interface;

          import car_interface.Icar_interface;

          public interface Icar_factory {

              
          public Icar_interface create_car();

          }


          新建一個創(chuàng)建奧迪車的汽車工廠實現(xiàn)類:

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


          新建一個創(chuàng)建大眾車的汽車工廠實現(xiàn)類:

          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();

              }

          }


          程序運行結(jié)果如下:

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

          通過使用工廠方法模式就可以將對象的創(chuàng)建延遲到子類進行實例化,而且每個工廠創(chuàng)建不同的品牌的汽車,每個汽車的功能都有自己“專利”的實現(xiàn),這樣可以將不同“品牌”的“汽車”的創(chuàng)建進行分類,有利于對象創(chuàng)建的清晰性。創(chuàng)建不同的汽車只需要改動這句代碼就可以了:
          Icar_factory car_factory = new audi_car_factory_imple();
          主站蜘蛛池模板: 龙川县| 胶州市| 沙雅县| 霍州市| 龙川县| 科尔| 东兴市| 万载县| 阳江市| 昌图县| 佳木斯市| 涡阳县| 金堂县| 锦屏县| 稻城县| 石嘴山市| 原平市| 拜泉县| 建湖县| 贡山| 成都市| 海林市| 大姚县| 宁海县| 正定县| 泸定县| 白城市| 腾冲县| 临城县| 佛冈县| 杂多县| 浠水县| 绥江县| 正宁县| 荥阳市| 麻栗坡县| 高陵县| 安西县| 巴塘县| 沐川县| 商城县|