设计模式学习——建造者模式
前言
复习总结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()方法里是具体的建造过程,由指挥者定义。实现了需要什么属性就建造什么属性。
总结
对建造者模式的一个总结。
参考资料 尚硅谷设计模式课程