建造者模式
将产品和产品的建造过程进行解耦 ===> 建造者模式
1 盖房子需求
2 传统方式解决盖房需求
1)思路
创建一个抽象的房子类,类中是抽象的建造方法,具体类中实现抽象的方法,
3 传统方式的问题分析
1)优点是好理解,操作简单
2)设计的程序结构,过于简单,没有设计缓冲层对象,程序的扩展和维护性不强。(也就是说这种设计方案将
产品(房子)和创建产品的过程(建造房子的过程)封装在一起,耦合性增强了)
3)解决方案:将产品和产品的建造过程解耦
4 建造者模式基本介绍
5 建造者模式的四个角色
6 建造者模式原理类图
7 建造者模式解决盖房需求应用实例
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); } }