隨筆 - 40, 文章 - 0, 評(píng)論 - 20, 引用 - 0

          導(dǎo)航

          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(2)

          隨筆檔案

          相冊(cè)

          收藏夾

          我的鏈接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          23種面向?qū)ο蟮脑O(shè)計(jì)模式----Factory method模式


          Factory method,工廠方法模式,定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓字類決定實(shí)例化哪一個(gè)類。也就是使一個(gè)類的實(shí)例化延遲到其子類,提供一種方法使對(duì)象創(chuàng)建變得多態(tài)。
          下面是我寫的一個(gè)例子,如有兩種工人,car worker和bus worker,所生成的產(chǎn)品分別是car 和 bus,我按照Factory method 的實(shí)現(xiàn)如下:


          --先定義car 和 bus 的父類,都是一種產(chǎn)品
          package Factory;
          public class Product {
           
           public  void whoami(){
            System.out.println("I am a product!");
           }
          }

          --Car 類
          package Factory;
          public class Car extends Product { 
           public Car() {
           } 
           public void whoami(){
            System.out.println("I am a car!");
           } 
          }
          --Bus 類
          package Factory;
          public class Bus extends Product { 
           public Bus() {
           } 
           public void whoami(){
            System.out.println("I am a bus!");
           }
          }
          --定義CarWorker和BusWorker的父類 worker
          package Factory;
          public abstract class Worker { 
           private Product theProduct;
           public abstract Product  createProduct(); 
           public void work(){
            theProduct = createProduct();
           }
           public void showMessage(){
            this.theProduct.whoami();
           }
          }
          --Carworker
          package Factory;
          public class CarWorker extends Worker { 
           public Product createProduct(){
             return new Car();
           }
          }
          --BusWorker
          package Factory;
          public class BusWorker extends Worker { 
           public Product  createProduct(){
            return new Bus();
           }
          }
          --下面看看具體的調(diào)用
          package Factory;
          public class TestAll {

           public static void main(String [] argv){ 
            Worker  worker = new CarWorker();
            worker.work();
            worker.showMessage();
            
            Worker  worker1 = new BusWorker();
            worker1.work();
            worker1.showMessage(); 
           } 
          }
          可以看到雖然這樣實(shí)現(xiàn)有一些麻煩,如新加一種產(chǎn)品時(shí),就必須從Product類創(chuàng)建一個(gè)子類,但是這樣做的
          好處也是顯而易見的,會(huì)給你系統(tǒng)帶來更大的可擴(kuò)展性和盡量少的修改量,再添加一種產(chǎn)品一種工人的時(shí)候,對(duì)以前的代碼是不必做任何修改的。

          <個(gè)人觀點(diǎn),僅作參考>

           

          posted on 2005-11-13 21:35 月亮 閱讀(927) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 23種面向?qū)ο蟮脑O(shè)計(jì)模式----Factory method模式  回復(fù)  更多評(píng)論   

          疑問:theProduct 私有變量對(duì)CarWorker和BusWorker是無效的?
          2006-08-11 22:42 | hao

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 肇庆市| 德江县| 瑞丽市| 昭苏县| 贺兰县| 栾城县| 肥城市| 同心县| 房产| 金川县| 广西| 昌平区| 苏尼特左旗| 澄迈县| 图木舒克市| 合肥市| 嘉祥县| 拉孜县| 泸州市| 泾川县| 商洛市| 张家界市| 黄梅县| 兰考县| 固原市| 枝江市| 尚义县| 泾阳县| 涡阳县| 锡林郭勒盟| 玉门市| 闽侯县| 林芝县| 乌兰察布市| 彝良县| 河曲县| 辽阳县| 巨野县| 古丈县| 斗六市| 黎城县|