Loading

建造者模式

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

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 @ 2020-10-02 21:30  青岑  阅读(142)  评论(0编辑  收藏  举报