建造者模式笔记
**建造者模式的构成**
1 抽象建造者(Builder):为创建一个Product对象的各个部件指定抽象接口
2 具体建造者(ConcreteBuilder):实现Builder接口,构造和装配产品的各个部件,
定义并明确它所创建的表示。提供一个返回这个产品的接口。
3 指挥者(Director):构建一个使用Builder接口的对象
4 产品角色(Product):被构建的复杂对象,具体建造者创建该产品的内部表示并
定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
**关系系列图如下:**
![建造者模式序列图]([https://img-blog.csdnimg.cn/20190124001804123.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0YXJ0Zm91cg==,size_16,color_FFFFFF,t_70])
具体Demo代码实现如下:
package com.design.builder;
/**
* @author lei.zhang
* 测试客户端
*/
public class Client {
public static void main(String[] args) {
Director director = new Director();
Builder builderA = new ConcreteBuilderA();
Builder builderB = new ConcreteBuilderB();
director.build(builderA);
Product productA = builderA.getResult();
productA.show();
System.out.println();
director.build(builderB);
Product productB = builderB.getResult();
productB.show();
}
}
package com.design.builder;
/**
* 创建指挥者
*/
public class Director {
public void build(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}
package com.design.builder;
/**
* @author lei.zhang
* 接口
*/
public interface Builder {
public void buildPartA();
public void buildPartB();
public Product getResult();
}
package com.design.builder;
/**
* build实现A
*/
public class ConcreteBuilderA implements Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("part a");
}
@Override
public void buildPartB() {
product.add("part b");
}
@Override
public Product getResult() {
return product;
}
}
package com.design.builder;
/**
* build实现B
*/
public class ConcreteBuilderB implements Builder {
private Product product = new Product();
@Override
public void buildPartA() {
product.add("part x");
}
@Override
public void buildPartB() {
product.add("part y");
}
@Override
public Product getResult() {
return product;
}
}
package com.design.builder;
import java.util.ArrayList;
import java.util.List;
/**
* @author lei.zhang
* 装配产品
*/
public class Product {
List<String> list = new ArrayList<>();
public void add(String content){
list.add(content);
}
public void show(){
System.out.println("Display Product:");
for (String content : list
) {
System.out.println(content);
}
}
}
上述就是建造者模式的全部demo,如有问题欢迎指正!!!