創建模式-工廠模式

          1.使用場景

               1)子類過多,不容易管理;構造對象過程過長;精簡代碼創建;

              2)目前我們代碼情況: 編寫代碼的時候,我們經常都在new對象,創建一個個的對象,而且還有很多麻煩的創建方式,eg:HashMap<String,Float> grade=new HashMap<String,Float>(),這樣的代碼創建方式太冗長了,難道你沒有想過把這個創建變的短一點么,比如:HashMap<String,Float>grade=HashMapFactory.new(),可以把你創建精簡一點;你也可以還有別的需求,在創建對象的時候,你需要不同的情況,創建統一種類別的對象,eg:我想生成不同的汽車,創建小轎車,創建卡車,創建公交汽車等等,都屬于同種類別:汽車,你難道沒有想過,我把這些創建的對象在一個工廠里來負責創建,我把創建分開化,交給一人來負責,這樣可以讓代碼更加容易管理,創建方式也可以簡單點。

          比如:Car    BMW=CarFactory.create(bmw);   把創建new由一個統一負責,這樣管理起來相當方便

              3)怎么改進:這個時候,你會想到,創建這樣同類別的東西,我把這個權利分出去,讓一個人來單獨管理,它只負責創建我的對象這個事情,所以你單獨簡歷一個對象來創建同類的對象,這個時候,你想這個東西有點像工廠一樣,生成同樣的產品,所以取了個名字:工廠模式,顧名思義,只負責對象的創建

              4)改進后的好處:代碼更加容易管理了,代碼的創建要簡潔很多。

              5)改進后的壞處:那就是你需要單獨加一個工廠對象來負責創建,多需要寫點代碼。

          2.一個實際的例子

             創建寶馬汽車與奔馳汽車的例子

             1)先提取出一個汽車的公用接口Car

                 public interface Car{

                    /**行駛*/    

                    public void drive();

                  }

             2)寶馬和奔馳汽車對象

          public class BMWCar implements Car {

          /**
          * 汽車發動
          */
          public void drive(){
             System.out.println("BMW Car drive");
          }
          }

          public class BengCar implements Car {

          /**
          * 汽車發動
          */
          public void drive(){
             System.out.println("BengChi Care drive");
          }
          }

              3)單獨一個汽車工廠來負責創建

               public class FactoryCar {
          /**
          * 制造汽車
          *
          * @param company 汽車公司
          * @return 汽車
          * @throws CreateCarException 制造汽車失敗異常
          */
          public static Car createCar(Company company)throws CreateCarException{
             if(company==Company.BMW){
              return new BMWCar();
             }else if(company==Company.Beng){
              return new BengCar();
             }
             return null;
          }
          }

              4)最后的代碼實現:

              Car BMWCar=FactoryCar.createCar(Company.BMW);
               BMWCar.drive();

          posted on 2012-08-06 17:28 陳睿 閱讀(268) 評論(0)  編輯  收藏 所屬分類: 設計模式

          導航

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 衡水市| 施秉县| 曲沃县| 肇庆市| 类乌齐县| 喜德县| 仪征市| 伽师县| 团风县| 西城区| 高碑店市| 磴口县| 新丰县| 建始县| 台前县| 隆回县| 大余县| 繁昌县| 蛟河市| 永安市| 东丰县| 甘谷县| 遵义县| 修水县| 武强县| 九寨沟县| 五常市| 喀什市| 周宁县| 离岛区| 潮安县| 清徐县| 高青县| 舟曲县| 吴桥县| 肇源县| 广饶县| 长葛市| 嵩明县| 什邡市| 肇庆市|