日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 五,建造者模式

五,建造者模式

來源:程序員人生   發布時間:2016-11-19 14:42:09 閱讀次數:3337次

建造者模式

建造者模式可以將1個產品的內部表象與產品的生成進程分割開來,從而可使1個建造進程生成具有不同的內部表象的產品對象。如果我們用了建造者模式,那末用戶就只需指定需要建造的類型就能夠得到它們,而具體建造的進程和細節就不需要知道。

建造者模式基礎類圖結構

建造者模式中存在的角色

  • 抽象建造者:給出1個接口,或是1個抽象類,以規范產品對象的各個組成成份的建造。模式中直接創建產品對象的是具體建造者角色。具體建造者角色必須要實現抽象建造者的兩個方法:1種是建造方法,2是結果返回方法。
  • 具體建造者:擔負這個角色的是與利用程序緊密相干的1些類,它們在利用程序調用下創建產品的實例。它的任務如上抽象建造者提到的1是建造方法,2是結果返回方法。
  • 導演者角色:擔負這個角色的類調用具體建造者角色以創建產品對象,應當指出的是,導演者角色并沒有產品類的具體知識,真正具有產品類的是具體建造角色。
  • 產品角色:1個系統中會有過剩1個的產品類,而且這些產品類其實不1定有共同的接口,而且可以完全不相干聯的。

導演者角色是與客戶端打交道的角色。導演者角色將客戶端創建產品的要求劃分為對各個零件的建造要求,再將這些要求委派給具體建造者角色。具體建造者角色是做具體建造工作的,但是卻不為客戶端所知。

建造者模式源代碼實現

產品角色

package com.designpattern.builder;

/**
 * Created by Administrator on 2016/9/21.
 */
public class Product {
    private String part1;
    private String part2;

    public String getPart1() {
        return part1;
    }

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public String getPart2() {

        return part2;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

    @Override
    public String toString() {
        return "Product{" +
                "part1='" + part1 + '\'' +
                ", part2='" + part2 + '\'' +
                '}';
    }
}

抽象建造者角色

package com.designpattern.builder;

/**
 * Created by Administrator on 2016/9/21.
 */
abstract public class Builder {

    public abstract void buildPart1();

    public abstract void buildPart2();

    public abstract Product retrieveResult();
}

具體建造者角色

package com.designpattern.builder;

/**
 * Created by Administrator on 2016/9/21.
 */

public class ConcreteBuilder extends Builder {

    private Product product = new Product();

    @Override
    public void buildPart1() {
        System.out.println("part1部份被創建");
        product.setPart1("part1");
    }

    @Override
    public void buildPart2() {
        System.out.println("part2部份被創建");
        product.setPart2("part2");
    }

    @Override
    public Product retrieveResult() {
        return product;
    }
}

導演者角色

package com.designpattern.builder;

/**
 * Created by Administrator on 2016/9/21.
 */
public class Director {
    private Builder builder;

    public Product construct(Builder builder){
        builder.buildPart1();
        builder.buildPart2();
        Product product = builder.retrieveResult();
        return product;
    }
}

客戶端調用

package com.designpattern.builder;

/**
 * Created by Administrator on 2016/9/21.
 */
public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builder = new ConcreteBuilder();
        Product product = director.construct(builder);
        System.out.println(product);
    }
}

多產品的建造者模式

具體建造角色分成A和B分別用來建造產品A和產品B,本來這個具體建造者角色可以設計成1個,但是如果系統中產品類增加的話,我們就要在這個具體建造者類中添加增加的產品的建造方法,不符合軟件設計的“開——閉”原則,所以,我采取了1個具體建造者負責1個具體產品類。

建造者模式與抽象工廠模式比較

建造者模式跟抽象工廠模式類似,都是用來創建同時屬于幾個產品族的對象的模式。但是抽象工廠模式中,每次工廠對象被調用時都會返回1個完全的產品對象,客戶端可能會用這個對象跟其他的對象組成更大更復雜的對象。而建造者模式是1點1點建造出1個復雜的產品,建造的進程產生的建造者角色內部,客戶端拿到的就是1個完全的對象。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产成人精品久久久国产成人 | 日韩av网站在线观看 | 九九精品视频在线观看 | 成人一区二区在线 | 91麻豆免费视频 | h片在线 | 国产一区福利 | av影片在线 | 日韩在线| 最近的中文字幕 | 亚洲一区二区三区在线播放 | 午夜免费小视频 | 免费高清黄色 | 国产区视频在线 | 日韩av一区在线 | 欧美在线视频二区 | 精品伊人久久久久7777人 | 国产精品久久久久永久免费观看 | 成人毛片在线播放器 | 一级毛片一级毛片一级毛片 | 黄色大片成人 | 美日韩av | 国产资源第一页 | 亚洲二区在线观看 | 日韩精品91 | 欧美婷婷综合 | 爱爱免费视频网址 | 91精品国产日韩91久久久久久 | 中文字幕一区二区三区在线播放 | 精品国产91久久久久久 | 成人午夜又粗又硬又大 | 日韩在线影院 | 天堂网在线视频 | 国产精品网站在线观看 | 在线视频福利 | 国产在线观看一区二区三区 | 国产午夜av | 一区网站在线观看 | 欧美激情视频一区二区 | 久久熟 | 日韩中文字幕av在线 |