什么是建造者模式
又称创造者模式,将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类或重载的方式,动态的创建具复合属性的对象。
简单解释
使用创建者模式,用户只需要指定需要建造的类型就可以得到,而不知道具体的建造细节;
UML类图
image优点
- 建造者独立,易扩展;
- 便于细节控制风险;
- 隐藏了具体的实现过程;
缺点
- 产品必须有共同点,范围有限制;
- 内部变化复杂,会有很多建造类;
代码解释
- 以盖房子为例,创建一个产品房子,构建房子的过程
/**
* 创建一个产品:房子,构建盖房子的过程
* @author ws
* @version 1.0
*/
public class House {
List<String> parts=new ArrayList<>();
public void Add(String part){
parts.add(part);
}
public void show(){
System.out.println("盖房子开始:");
for (String part:parts) {
System.out.println(part);
}
}
}
- 声明盖房子的抽象类,明确盖房子的三个过程
/**
* 构建抽象类,声明三个构建过程
* @author ws
* @version 1.0
*/
public abstract class Builder {
public abstract void builderOne();
public abstract void builderTwo();
public abstract void builderThree();
public abstract House getResult();
}
- 创建一个砖头房的实现类,继承盖房子
/**
*砖房
* @author ws
* @version 1.0
*/
public class BrickHouse extends Builder {
private House house=new House();
@Override
public void builderOne() {
house.Add("打地基");
}
@Override
public void builderTwo() {
house.Add("砌砖");
}
@Override
public void builderThree() {
house.Add("上梁");
}
@Override
public House getResult() {
return house;
}
}
- 创建一个商砼房的实现类,继承盖房子
/**
* 混凝土房
* @author 1.0
* @version 1.0
*/
public class ConcreteHourse extends Builder {
private House house=new House();
@Override
public void builderOne() {
house.Add("打地基");
}
@Override
public void builderTwo() {
house.Add("拌混凝土");
}
@Override
public void builderThree() {
house.Add("浇灌");
}
@Override
public House getResult() {
return house;
}
}
- 创建一个工头类,由工头指挥盖房子
/**
* 工头指挥盖房子,用来指挥盖房子的过程
* @author ws
* @version 1.0
*/
public class Foreman {
public void construct(Builder builder){
builder.builderOne();
builder.builderTwo();
builder.builderThree();
}
}
- 测试类
public static void main(String[] args) {
Foreman foreman=new Foreman();
Builder brick=new BrickHouse();
Builder concrtet=new ConcreteHourse();
//盖砖房
foreman.construct(brick);
House brickHourse=brick.getResult();
brickHourse.show();
//盖混凝土房
foreman.construct(concrtet);
House concreteHourse=concrtet.getResult();
concreteHourse.show();
}
盖房子开始:
打地基
砌砖
上梁
盖房子开始:
打地基
拌混凝土
浇灌
参照:大话设计模式
网友评论