建造者模式
建造者模式(Builder):
将一个复杂对象的构建与他的表示分离,使同样的构建过程可以创建不同的表示。
建造者模式UMl类图:
建造者模式简单代码实现:
具体产品类
public class Product {
//产品部件
private List<String> parts = new ArrayList<String>();
//添加产品部件
public void addPart(String part){
parts.add(part);
}
public void show(){
System.out.println("\n产品 创建---");
for (String part : parts) {
System.out.println(part);
}
}
}
建造者
接口
public interface Builder {
public void buildPartA();
public void buildPartB();
public Product getResult();
}
建造者接口实现
public class ConcreteBuilder implements Builder{
private Product product= new Product();
@Override
public void buildPartA() {
product.addPart("部件A");
}
@Override
public void buildPartB() {
product.addPart("部件B");
}
@Override
public Product getResult() {
return product;
}
}
public class ConcreteBuilder2 implements Builder{
private Product product= new Product();
@Override
public void buildPartA() {
product.addPart("部件X");
}
@Override
public void buildPartB() {
product.addPart("部件Y");
}
@Override
public Product getResult() {
return product;
}
}
指挥者类
public class Director {
public void construct(Builder builder){
builder.buildPartB();
builder.buildPartA();
}
}
主方法
public class Mian {
public static void main(String[] args) {
Director director = new Director();
Builder b1= new ConcreteBuilder();
Builder b2= new ConcreteBuilder2();
director.construct(b1);
Product p = b1.getResult();
p.show();
director.construct(b2);
Product p2 = b2.getResult();
p2.show();
}
}
建造者模式与工厂模式的比较:
建造者模式的结构中引入了一个指挥者类Director,该类的作用主要有两个:
一、它隔离客户与生产过程;
二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
建造者模式与抽象工厂模式的比较:
与抽象工厂模式相比, 建造者模式返回一个组装好的完整产品 ,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
如果将抽象工厂模式看成汽车配件生产工厂 ,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂 ,通过对部件的组装可以返回一辆完整的汽车。
一、它隔离客户与生产过程;
二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
建造者模式与抽象工厂模式的比较:
与抽象工厂模式相比, 建造者模式返回一个组装好的完整产品 ,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
如果将抽象工厂模式看成汽车配件生产工厂 ,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂 ,通过对部件的组装可以返回一辆完整的汽车。