2020-10-21

it2024-01-25  71

设计模式学习——建造者模式

 

 


前言

复习总结Java设计模式


 

一、建造者模式是什么?

一种创建模式,主要用于一步步的创建对象

二、建造者模式实现主要思想

产品对象描述产品,抽象建造者设计产品的建造方法,具体建造者实现产品的建造方法,指挥者调用建造者提供的方法对产品进行建造。

三、实现方式

1.产品

代码如下(示例):这里定义了一个产品对象,描述了一间房子,有地基,墙,屋顶,房子类型

public class House { private int base; private int wall; private String roofed; private String houseType;

当然也可以去掉房子类型,用房子的子类(如高楼类,别墅类)来描述建造不同类型的房子

2.抽象建造者

public abstract int buildBase(); public abstract int buildWall(); public abstract String buildRoofed(); public abstract String buildType();

实际上我更愿意叫他设计师,抽象建造者设计了建造过程。

3.具体建造者

public class CommonHouseBuilder extends HouseBuilder { @Override public int buildBase() { System.out.println("普通房子打地基"); return 5; } @Override public int buildWall() { System.out.println("普通房子砌墙"); return 15; } @Override public String buildRoofed() { System.out.println("普通房子建屋顶"); return "透明"; } @Override public String buildType() { return "普通房子"; } }

这是一个普通房子建造者,他实现了抽象建造者定义的方法

 4.懒汉模式——线程安全实现

public static synchronized Singleton getInstance(){ if (instance==null) { instance = new Singleton(); } return instance; }

 对整个方法进行同步,缺点是非常影响程序速度,每次获取单例都得进行同步

 5.指挥者

public class HouseDirector { private HouseBuilder builder; public HouseDirector(HouseBuilder builder) { this.builder = builder; } public HouseBuilder getBuilder() { return builder; } public void setBuilder(HouseBuilder builder) { this.builder = builder; } public HouseDirector() { } public House build(){ House house = new House(); house.setBase(builder.buildBase()); house.setWall(builder.buildWall()); house.setRoofed(builder.buildRoofed()); house.setHouseType(builder.buildType()); return house; } }

指挥者通过传入不同的建造者实现对不同产品的建造,build()方法里是具体的建造过程,由指挥者定义。实现了需要什么属性就建造什么属性。

 


 

总结

对建造者模式的一个总结。

参考资料 尚硅谷设计模式课程

最新回复(0)