真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java描述設(shè)計(jì)模式(06):建造者模式

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

站在用戶的角度思考問題,與客戶深入溝通,找到遂昌網(wǎng)站設(shè)計(jì)與遂昌網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋遂昌地區(qū)。

一、生活場景

基于建造者模式,描述軟件開發(fā)的流程。

1、代碼實(shí)現(xiàn)

/**
 * 基于建造者模式描述軟件開發(fā)
 */
public class C01_InScene {
    public static void main(String[] args) {
        BuilderSoft builderSoft = new SoftImpl () ;
        ProjectManager manager = new ProjectManager(builderSoft) ;
        manager.createSoft();
    }
}

/**
 * 手機(jī)軟件產(chǎn)品開發(fā)
 */
class MobileSoft {
    // 設(shè)計(jì)
    private String design ;
    // 架構(gòu)
    private String frame ;
    // 開發(fā)
    private String develop ;
    // 上線
    private String online ;
    // 省略 GET SET 方法
}
/**
 * 手機(jī)軟件流程抽象類
 */
abstract class BuilderSoft {
    // 前期工作
    public abstract void earlyWork () ;
    // 中期工作
    public abstract void midWork () ;
    // 后期工作
    public abstract void lateWork () ;
    // 手機(jī)軟件完成
    public abstract MobileSoft builderSoft () ;
}

/**
 * 手機(jī)軟件具體實(shí)現(xiàn)
 */
class SoftImpl extends BuilderSoft {
    private MobileSoft mobileSoft = new MobileSoft();
    @Override
    public void earlyWork() {
        System.out.println("軟件前期設(shè)計(jì)...");
    }
    @Override
    public void midWork() {
        System.out.println("軟件中期架構(gòu)...");
        System.out.println("軟件中期開發(fā)...");
    }
    @Override
    public void lateWork() {
        System.out.println("軟件后期上線...");
    }
    @Override
    public MobileSoft builderSoft() {
        return mobileSoft ;
    }
}
/**
 * 項(xiàng)目經(jīng)理:把控項(xiàng)目進(jìn)度
 */
class ProjectManager {
    private BuilderSoft builderSoft ;
    ProjectManager (BuilderSoft builderSoft){
        this.builderSoft = builderSoft ;
    }
    // 統(tǒng)籌項(xiàng)目周期
    public void createSoft (){
        builderSoft.earlyWork();
        builderSoft.midWork();
        builderSoft.lateWork();
        // MobileSoft mobileSoft = builderSoft.builderSoft() ;
        // return mobileSoft ;
    }
}

2、代碼結(jié)構(gòu)圖

Java描述設(shè)計(jì)模式(06):建造者模式

二、建造者模式

1、基礎(chǔ)概念

建造模式是對(duì)象的創(chuàng)建模式。建造模式可以將一個(gè)產(chǎn)品的內(nèi)部屬性描述與產(chǎn)品的生產(chǎn)過程分割,從而可以使一個(gè)建造過程生成具有不同的內(nèi)部表象的產(chǎn)品對(duì)象。也就是使用一個(gè)中介對(duì)象封裝一系列的對(duì)象交互,使其各個(gè)對(duì)象不需要顯示的相互調(diào)用,而且可以單獨(dú)的改變對(duì)象之間的交互。

2、核心角色

1)、抽象建造者(Builder)角色

給出一個(gè)抽象接口,以規(guī)范產(chǎn)品對(duì)象的各個(gè)組成成分的建造。模式中直接創(chuàng)建產(chǎn)品對(duì)象的是具體建造者角色。

2)、具體建造者(ConcreteBuilder)角色

完成的任務(wù)包括:1.實(shí)現(xiàn)抽象建造者Builder所聲明的接口,給出完成創(chuàng)建產(chǎn)品實(shí)例的操作。2.在建造完成后,提供產(chǎn)品的實(shí)例。

3)、導(dǎo)演者(Director)角色

擔(dān)任這個(gè)角色的類調(diào)用具體建造者角色以創(chuàng)建產(chǎn)品對(duì)象。

4)、產(chǎn)品(Product)角色

產(chǎn)品便是建造的對(duì)象。一般來說,一個(gè)系統(tǒng)中會(huì)有多個(gè)產(chǎn)品類,而且這些產(chǎn)品類并不一定有共同的接口,而完全可以是不相關(guān)聯(lián)的。

3、模式圖解

Java描述設(shè)計(jì)模式(06):建造者模式

4、源碼實(shí)現(xiàn)

/**
 * 建造者模式代碼
 */
public class C02_Builder {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.builderProduct();
        System.out.println(product.getAct1());
        System.out.println(product.getAct2());
    }
}
/**
 * 產(chǎn)品類
 */
class Product {
    /*定義一些產(chǎn)品的操作*/
    private String act1;
    private String act2;
    public String getAct1() {
        return act1;
    }
    public void setAct1(String act1) {
        this.act1 = act1;
    }
    public String getAct2() {
        return act2;
    }
    public void setAct2(String act2) {
        this.act2 = act2;
    }
}
/**
 * Builder 抽象建造者類
 */
abstract class Builder{
    public abstract void builderact1();
    public abstract void builderact2();
    public abstract Product builderProduct();
}
/**
 * 具體建造者類
 */
class ConcreteBuilder extends Builder{
    private Product product = new Product();
    @Override
    public void builderact1() {
        product.setAct1("操作一:執(zhí)行...");
    }
    @Override
    public void builderact2() {
        product.setAct2("操作二:執(zhí)行...");
    }
    @Override
    public Product builderProduct() {
        return product;
    }
}
/**
 *  Director 導(dǎo)演者類
 */
class Director{
    /*使用建造者抽象類*/
    private Builder builder;
    Director(Builder builder){
        this.builder = builder;
    }
    /*負(fù)責(zé)調(diào)用各個(gè)建造方法*/
    public void construct(){
        builder.builderact1();
        builder.builderact2();
    }
}

三、實(shí)際應(yīng)用

1、JDK中應(yīng)用

Java描述設(shè)計(jì)模式(06):建造者模式

分析

1)、Appendable定義多個(gè)append() 抽象方法,抽象建造者。

2)、AbstractStringBuilder實(shí)現(xiàn)Appendable接口,已經(jīng)作為了建造者,只是抽象類無法實(shí)例化。

3)、StringBuilder繼承AbstractStringBuilder,即作為具體建造者,也作為指揮者。

2、Spring中應(yīng)用

Java描述設(shè)計(jì)模式(06):建造者模式

源碼實(shí)現(xiàn)

// 系列方法
public BeanDefinitionBuilder setParentName(String parentName);
public BeanDefinitionBuilder setFactoryMethod(String factoryMethod);
public BeanDefinitionBuilder setFactoryMethodOnBean(String factoryMethod, String factoryBean);
public BeanDefinitionBuilder addConstructorArgValue(@Nullable Object value);
public BeanDefinitionBuilder addConstructorArgReference(String beanName);
public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value);
// 構(gòu)建Bean
public AbstractBeanDefinition getRawBeanDefinition() {
    return this.beanDefinition;
}
public AbstractBeanDefinition getBeanDefinition() {
    this.beanDefinition.validate();
    return this.beanDefinition;
}

上面兩處建造者模式的實(shí)際應(yīng)用,都有點(diǎn)形散而神不散的感覺。

四、優(yōu)缺點(diǎn)分析

  • 優(yōu)點(diǎn):減少類之間的相互依賴,降低耦合度。
  • 缺點(diǎn):ConcreateBuilder變得臃腫龐大,邏輯復(fù)雜。

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述設(shè)計(jì)模式(06):建造者模式


新聞名稱:Java描述設(shè)計(jì)模式(06):建造者模式
當(dāng)前網(wǎng)址:http://weahome.cn/article/jscjoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部