建造者模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式组成
抽象建造者(builder):为创建一个产品对象的各个部件指定抽象接口。
实际建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
指导者(Director):构造一个使用Builder接口的对象。
产品角色(Product):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
UML图
个人理解
建造者定义很通俗易懂,就是将装配的过程和成果展示分离,过程不变,但是我可以改变材料,出来不相同的作品。
这个过程就由抽象建造者定义
实际建造者就是通过定义好的过程添加不同的材料建造不一样的产品,每个实际建造者都带表了一种产品
指导者就是指挥让哪一个实际建造者来制作
产品就不要说了,它定义了都有什么部件
举个例子
interface Builder{
//定义了创建流程,一共两步
void buildUp();
void buildDown();
}
//二哈创建类,专门创建二哈用
class DogBuilder implements Builder{
private Animal product=new Animal();
@Override
public void buildUp() {
product.setUp("开始构建二哈上半部");
}
@Override
public void buildDown() {
product.setDown("开始构建二哈下半部");
}
public Animal getProduct(){
return product;
}
}
//同理专门创建加菲猫用
class CatBuilder implements Builder{
private Animal product=new Animal();
@Override
public void buildUp() {
product.setUp("开始构建加菲上半部");
}
@Override
public void buildDown() {
product.setDown("开始构建加菲下半部");
}
public Animal getProduct(){
return product;
}
}
//指导者,哪个实际创建者进来就创建哪个
class Director{
public void construct(Builder builder){
builder.buildUp();
builder.buildDown();
}
}
//产品类,我这里是动物
class Animal{
//偷个懒简单把动物分成上下两部,定义了实际产品的部件
String Up;
String Down;
public String getUp() {
return Up;
}
public void setUp(String up) {
Up = up;
}
public String getDown() {
return Down;
}
public void setDown(String down) {
Down = down;
}
public void show(){
System.out.println(Up);
System.out.println(Down);
}
}
public class Client {
public static void main(String[] args) {
Director director=new Director();
//先来创建一只狗
DogBuilder dogBuilder=new DogBuilder();
director.construct(dogBuilder);
Animal dog=dogBuilder.getProduct();
dog.show();
//再来一只猫
CatBuilder catBuilder=new CatBuilder();
director.construct(catBuilder);
Animal cat=catBuilder.getProduct();
cat.show();
}
}
写到这里我突然发现建造者模式和工厂方法模式有点类似,因为从增加新的产品方式来看,感觉用谁都差不多,不过查找一些资料后,来看:
工厂方法模式针对的是产品本身并不很复杂,而建造者模式针对的则是创建符合的产品,可以很复杂,模块可以很多。
因此我觉得选哪个到时候还是要看实际的产品问题。