隨筆 - 40, 文章 - 0, 評論 - 20, 引用 - 0
          數據加載中……

          23種面向對象的設計模式----Factory method模式


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


          --先定義car 和 bus 的父類,都是一種產品
          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();
           }
          }
          --下面看看具體的調用
          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(); 
           } 
          }
          可以看到雖然這樣實現有一些麻煩,如新加一種產品時,就必須從Product類創建一個子類,但是這樣做的
          好處也是顯而易見的,會給你系統帶來更大的可擴展性和盡量少的修改量,再添加一種產品一種工人的時候,對以前的代碼是不必做任何修改的。

          <個人觀點,僅作參考>

           

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

          評論

          # re: 23種面向對象的設計模式----Factory method模式  回復  更多評論   

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

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


          網站導航:
           
          主站蜘蛛池模板: 张北县| 广州市| 谢通门县| 页游| 楚雄市| 桂阳县| 九龙坡区| 尚义县| 道真| 鲁山县| 吉水县| 滨州市| 祁连县| 华亭县| 德昌县| 册亨县| 连南| 当雄县| 广昌县| 五寨县| 大竹县| 山东省| 乌鲁木齐市| 罗城| 长沙县| 华池县| 祁东县| 社会| 龙门县| 乌苏市| 长泰县| 邵东县| 图木舒克市| 绿春县| 乌什县| SHOW| 彰化县| 鹿泉市| 临夏市| 巴林右旗| 延川县|