posts - 2, comments - 2, trackbacks - 0, articles - 23
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          一、創(chuàng)建模式(Creational Pattern) --> 對(duì)類(lèi)的實(shí)例化過(guò)程的抽象化
                  分類(lèi): 
                      a.類(lèi)的創(chuàng)建模式        -->把類(lèi)的創(chuàng)建延遲到子類(lèi),從而封裝了子類(lèi)的具體實(shí)現(xiàn)
                      b.對(duì)象的創(chuàng)建模式    -->把對(duì)象的創(chuàng)建過(guò)程動(dòng)態(tài)的委派給另一個(gè)對(duì)象,從而動(dòng)態(tài)的決定客戶(hù)端需要哪些類(lèi)的實(shí)例,以及這些類(lèi)是如何被創(chuàng)建和組合在一起的
                 包含的具體模式有:
                      工廠模式、單(多)例模式、建造模式、原始模型模式 等等
          二、簡(jiǎn)單工廠模式(Simple Factory)  --->靜態(tài)工廠方法模式(Static Factory Method Pattern)
                  1.工廠模式分為3種
                         a.簡(jiǎn)單工廠模式(Simple Factory)
                         b.工廠方法模式(Factory Method)
                         c.抽象工廠模式(Abstract Factory)
                  2.Simple Factory : 就是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一個(gè)產(chǎn)品的實(shí)例
                  3.UML圖
                      
                  4.簡(jiǎn)單測(cè)試代碼如下:
                      

           1/**
           2 * 定義一個(gè)接口 和 兩個(gè)實(shí)現(xiàn)類(lèi)
           3 */

           4public interface IFruit {
           5    /**
           6     * 種植
           7     */

           8    void plant();
           9    
          10    /**
          11     * 生長(zhǎng)
          12     */

          13    void grow();
          14}

          15
          16public class Apple implements IFruit {
          17
          18    public void grow() {
          19        System.out.println("Apple grow()");
          20    }

          21
          22    public void plant() {
          23        System.out.println("Apple plant()");
          24    }

          25
          26}

          27
          28public class Orange implements IFruit {
          29
          30    public void grow() {
          31        System.out.println("Orange grow()");
          32    }

          33
          34    public void plant() {
          35        System.out.println("Orange plant()");
          36    }

          37
          38}

          39
          40/**
          41 * 對(duì)應(yīng)的字符串不存在的異常處理
          42 */

          43public class BadFruitException extends Exception {
          44
          45    public BadFruitException(String message) {
          46        super(message);
          47    }

          48    
          49}

          50
          51/**
          52 * 簡(jiǎn)單工廠類(lèi)
          53 */

          54public class FruitGardener {
          55    
          56    public static IFruit factory(String which) throws BadFruitException {
          57        if(which.equalsIgnoreCase("apple")) {
          58            return new Apple();
          59        }
           else if(which.equalsIgnoreCase("orange")) {
          60            return new Orange();
          61        }
           else {
          62            throw new BadFruitException("bad fruit request");
          63        }

          64    }

          65}

          66
          67/**
          68 * 測(cè)試簡(jiǎn)單工廠模式
          69 */

          70public class TestSimpleFactory {
          71
          72    public static void main(String[] args) {
          73        try {
          74            IFruit apple = FruitGardener.factory("apple");
          75            apple.plant();
          76            apple.grow();
          77            
          78            IFruit xx = FruitGardener.factory("xx");
          79            xx.plant();
          80            xx.grow();
          81            
          82        }
           catch (BadFruitException e) {
          83            e.printStackTrace();
          84        }

          85    }

          86}

          三、分析
                  1.從上面的例子可以看出:Simple Factory Pattern 就是由一個(gè)工廠類(lèi)根據(jù)傳入的參數(shù)來(lái)決定創(chuàng)建哪一種產(chǎn)品實(shí)例.
                  2.Simple-Factory 涉及到3個(gè)角色:工廠類(lèi)角色(Creator) 、抽象產(chǎn)品角色(Product)、具體產(chǎn)品角色(Concrete Product)
                  3.優(yōu)點(diǎn):實(shí)現(xiàn)了對(duì)責(zé)任的分割 
                     缺點(diǎn):當(dāng)產(chǎn)品需要擴(kuò)展的時(shí)候,產(chǎn)品類(lèi)直接沒(méi)有影響,而工廠類(lèi)就必須修改了~~ 因?yàn)楣S類(lèi)涵蓋了所有產(chǎn)品的創(chuàng)造邏輯
          四:在java中的應(yīng)用
                  1.DateFormat
                     (為一個(gè)抽象類(lèi),提供static  DateFormat getDateInstance()) : 這里可以粗略的看作 簡(jiǎn)單工廠類(lèi)和抽象產(chǎn)品類(lèi)的一個(gè)合并
                      ---> 具體產(chǎn)品類(lèi)SimpleDateFormat
              

          主站蜘蛛池模板: 桑日县| 安塞县| 大荔县| 镇安县| 肥东县| 新田县| 临泽县| 沙洋县| 耿马| 顺平县| 普陀区| 文登市| 遵义县| 盐亭县| 增城市| 东源县| 江安县| 邳州市| 邢台县| 措美县| 广昌县| 手机| 开阳县| 芦溪县| 革吉县| 泗洪县| 宁南县| 北安市| 梧州市| 女性| 娄底市| 香港 | 德惠市| 保德县| 六枝特区| 大同县| 休宁县| 广州市| 宜昌市| 南川市| 兴文县|