日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【设计模式】建造者模式(生成器模式)

發布時間:2024/4/24 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】建造者模式(生成器模式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用頻率:★★☆☆☆

一、什么是生成器模式

對復雜對象的創建過程進行抽象,相同的創建步驟,不一樣的創建過程實現,生成不同表示的對象;

例如創建一臺電腦,對其應用生成器模式進行創建:

創建過程是指創建cpu、創建內存、創建顯示器三個步驟,所有品牌電腦的創建過程都是一樣的,可以對其抽象出一個抽象建造者角色Builder;

不同廠商(指的是具體的Builder實現,不同廠商不一樣)生產的電腦,表現出來是不一樣的;

二、適用場合

被創建的對象內部結構比較復雜,且需要一步步構造

三、角色

抽象建造者
具體建造者
指揮者
產品
產品消費者

說明:

具體建造者繼承抽象建造者;

指揮者用于生成具體產品對象,且指揮者有一個建造者屬性可以設置更改;

一個指揮者,只要其建造者不一樣,生成的產品對象的表現也不一樣;

產品消費者使用指揮者生成的具體產品對象;

四、例子

demo說明:

以生產PC為例,這里我們假設生產一臺PC只需三個步驟,創建cpu、創建內存、創建顯示器,將三個步驟抽象成一個Builder,且該Builder有一個創建待加工的產品的方法和返回成品的方法;

以聯想電腦和惠普電腦為例,認為它們在生產電腦的過程中,以上三個步驟的實現是不一致的,對應著具體的HPBuilder和LenovoBuilder;

同時,我們把電腦產品封裝成Computer類,其擁有cpu、內存、顯示器三個屬性;

然后,再創建一個指揮者類Director,其擁有一個建造者對象和建造PC產品的方法construct,該方法通過具體建造者對象,依次執行每個步驟,最后返回建造完成的產品對象;

類圖:

代碼實現:

產品角色

package com.pichen.dp.creationalpattern.builder;

public class Computer {

    private String cpu;
    private String ram;
    private String monitor;
    /**
     * @return the cpu
     */
    public String getCpu() {
        return cpu;
    }
    /**
     * @param cpu the cpu to set
     */
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    /**
     * @return the ram
     */
    public String getRam() {
        return ram;
    }
    /**
     * @param ram the ram to set
     */
    public void setRam(String ram) {
        this.ram = ram;
    }
    /**
     * @return the monitor
     */
    public String getMonitor() {
        return monitor;
    }
    /**
     * @param monitor the monitor to set
     */
    public void setMonitor(String monitor) {
        this.monitor = monitor;
    }
    
    public String toString(){
        return "PC:" + this.cpu + ", " + this.ram + ", " + this.monitor;
    }
}

View Code

抽象建造者

package com.pichen.dp.creationalpattern.builder;

public abstract class Builder {
    private Computer pc ;
    public abstract void buildCpu();
    public abstract void buildRam();
    public abstract void buildMonitor();
    
    
    public void createComputer(){
        this.pc = new Computer();
    }
    public Computer getComputer(){
        return this.pc;
    }
}

View Code

兩個具體建造者

package com.pichen.dp.creationalpattern.builder;



public class LenovoBuilder extends Builder{
    @Override
    public void buildCpu() {
        System.out.println("lenovo: build cpu start...");
        this.getComputer().setCpu("lenovo cpu");
        System.out.println("lenovo: build cpu end...");
    }

    @Override
    public void buildRam() {
        System.out.println("lenovo: build ram start...");
        this.getComputer().setRam("lenovo ram");
        System.out.println("lenovo: build ram end...");
        
    }

    @Override
    public void buildMonitor() {
        System.out.println("lenovo: build monitor start...");
        this.getComputer().setMonitor("lenovo monitor");
        System.out.println("lenovo: build monitor end...");
        
    }
}

View Code

package com.pichen.dp.creationalpattern.builder;

public class HPBuilder extends Builder{

    @Override
    public void buildCpu() {
        System.out.println("hp: build cpu start...");
        this.getComputer().setCpu("hp cpu");
        System.out.println("hp: build cpu end...");
    }

    @Override
    public void buildRam() {
        System.out.println("hp: build ram start...");
        this.getComputer().setRam("hp ram");
        System.out.println("hp: build ram end...");
        
    }

    @Override
    public void buildMonitor() {
        System.out.println("hp: build monitor start...");
        this.getComputer().setMonitor("hp monitor");
        System.out.println("hp: build monitor end...");
        
    }

}

View Code

指揮者

package com.pichen.dp.creationalpattern.builder;

public class Director {

    private Builder builder;
    public Director(Builder builder) {
        this.builder = builder;
    }
    
    public Computer construct(){
        this.builder.createComputer();
        this.builder.buildCpu();
        this.builder.buildRam();
        this.builder.buildMonitor();
        return this.builder.getComputer();
    }

    /**
     * @return the builder
     */
    public Builder getBuilder() {
        return builder;
    }

    /**
     * @param builder the builder to set
     */
    public void setBuilder(Builder builder) {
        this.builder = builder;
    }
}

main函數

package com.pichen.dp.creationalpattern.builder;

public class Main {
    public static void main(String[] args) {
        Builder hpBuilder = new HPBuilder();
        Director director = new Director(hpBuilder);
        Computer hpPC = director.construct();
        System.out.println(hpPC.toString());
        
        Builder lenovoBuilder = new LenovoBuilder();
        director.setBuilder(lenovoBuilder);
        Computer lenovoPC = director.construct();
        System.out.println(lenovoPC.toString());
        
    }
}

運行結果如下,相同的指揮者使用不同的建造者創建了不同的產品:

links

生成器or建造者模式★★☆☆☆

抽象工廠模式★★★★★

工廠方法模式★★★★★

簡單工廠模式★★★★☆

總結

以上是生活随笔為你收集整理的【设计模式】建造者模式(生成器模式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产乱轮视频 | 黄网站视频在线观看 | 亚洲av无码乱码国产精品fc2 | 亚洲成人a√ | 精品国产区一区二 | 欧美成人亚洲 | 欧美午夜精品理论片 | 亚洲一区a | 午夜在线观看视频 | 欧美日韩国产三级 | 日韩毛片视频 | 亚洲精品日韩丝袜精品 | 国产第一精品视频 | 91久久久久久久久久久久 | 久久伊人99| 麻豆成人入口 | 91精品国产日韩91久久久久久 | 日本高清不卡在线 | 激情爱爱网站 | 美日韩av在线 | 国产高清精品在线 | 日韩国产精品一区二区三区 | 日日碰狠狠添天天爽无码 | 久久3p | 国产在线小视频 | 国产精品久久久一区二区三区 | 欧美视频网站 | 人人妻一区二区三区 | www.超碰在线观看 | 日韩视频在线免费观看 | 无人在线观看的免费高清视频 | 国内精品久久99人妻无码 | 欧美综合一区二区 | 国产精品成人电影在线观看 | 操小妞| 国产黄色激情视频 | 久久午夜网 | 成人精品免费网站 | 成人网av| 日韩一区二区三区免费视频 | 亚洲av无码国产在丝袜线观看 | 中国女人内96xxxxx | 国产黑丝91 | 在线观看av国产一区二区 | 鲁片一区二区三区 | 在线观看免费视频 | 97人人在线 | mm131丰满少妇人体欣赏图 | 18久久| 一区二区高清视频 | 男女交性视频播放 | 色午夜| 成年人在线免费看 | 久久久久久久久久久免费 | av播播| 大地资源中文在线观看免费版 | 韩国伦理片观看 | 人妻精品久久久久中文字幕 | 黄色特级一级片 | 麻豆传媒一区二区三区 | 久久久精品视频一区 | 日韩插插| 人妻精油按摩bd高清中文字幕 | 福利网站在线 | 无码国产精品一区二区色情男同 | 国产人妻777人伦精品hd | 俄罗斯女人裸体性做爰 | 中文字幕一区二区三区人妻 | 国产精品区一区二区三 | 网站免费在线观看 | 蜜臀av性久久久久蜜臀aⅴ | 99热这里有 | 久久九色 | julia中文字幕在线 | 国模私拍视频在线 | 热热色国产 | 午夜性视频 | 国产a久久麻豆入口 | 中国挤奶哺乳午夜片 | 久草资源在线观看 | www.国产一区二区 | 久射久| 精品人妻无码一区二区三 | 欧美黑人一级 | 波多野结衣a v在线 欧洲免费av | 东北少妇不带套对白 | 日韩人妻精品一区二区三区视频 | 91在线视频网址 | 欧美亚洲自拍偷拍 | 实拍澡堂美女洗澡av | 日本午夜网 | 青青视频在线免费观看 | 一级一片免费看 | 波多野结衣久久精品 | 麻豆影音先锋 | 风间由美一区 | av无码精品一区二区三区 | 日韩精品无码一区二区三区久久久 | 黄色三级免费观看 |