建造者模式

将产品和产品的建造过程进行解耦 ===> 建造者模式

1 盖房子需求#

clipboard

 #

2 传统方式解决盖房需求#

1)思路

创建一个抽象的房子类,类中是抽象的建造方法,具体类中实现抽象的方法,

clipboard

 #

3 传统方式的问题分析#

1)优点是好理解,操作简单

2)设计的程序结构,过于简单,没有设计缓冲层对象,程序的扩展和维护性不强。(也就是说这种设计方案将

产品(房子)和创建产品的过程(建造房子的过程)封装在一起,耦合性增强了)

3)解决方案:将产品和产品的建造过程解耦

 #

4 建造者模式基本介绍#

clipboard

 #

5 建造者模式的四个角色#

clipboard

 #

6 建造者模式原理类图#

clipboard

7 建造者模式解决盖房需求应用实例#

clipboard

1)产品:

复制代码
public class House {

    private String baise;
    private String wall;
    private String roofed;

    public String getBaise() {
        return baise;
    }

    public void setBaise(String baise) {
        this.baise = baise;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }
}
复制代码

 

2)抽象的建造者

复制代码
/**
 * @author houChen
 * @date 2020/9/25 7:18
 * @Description: 建造者模式中抽象的建造者
 */
public abstract class HouseBuilder {

    protected House house = new House();

    // 建造的流程
    //打桩
    public abstract void buildBasic();

    //砌墙
    public abstract void buildWalls();

    //封顶
    public abstract void roofed();

    //建造房子
    public House build(){
       /* buildBasic();
        buildWalls();
        roofed();*/
        return house;
    }

}
复制代码

 

3)具体的建造者

复制代码
/**
 * @author houChen
 * @date 2020/9/25 7:21
 * @Description:
 */
public class CommonHouse extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println("给普通房子打桩!5米 ");
    }

    @Override
    public void buildWalls() {
        System.out.println("给普通房子砌墙!6米 ");
    }

    @Override
    public void roofed() {
        System.out.println("给普通房子盖顶!7米 ");
    }
}
复制代码

 

4)建造模式中的指挥者

复制代码
/**
 * @author houChen
 * @date 2020/9/25 7:24
 * @Description:  建造者模式中的指挥者
 */
public class HouseDirector {
    HouseBuilder houseBuilder = null;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //将房子建造的过程交给指挥者
    public House constractHouse(){
        houseBuilder.buildBasic();;
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        return houseBuilder.build();
    }
}
复制代码

 

5)测试

public class Client {
    public static void main(String[] args) {
        CommonHouse commonHouse = new CommonHouse();
       HouseDirector director = new HouseDirector(commonHouse);
        House house = director.constractHouse();
        System.out.println(house);
    }
}

image

posted @   青岑  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
主题色彩