标签:pre 变化 bst lang tle head 构造方法 info protect
? 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1. 建造者(Builder): 为创建一个产品对象的各个部件指定抽象接口
2. 具体建造者(ConcreteBuider):实现Builder的接口,以构建和装配该产品的各个部分,定义并明确它所创建的表示,并提供一个检索产品的接口。
3. 指挥者(Director):指挥并构造一个使用Builder 接口的的对象
4. 产品(produce):表示被构造的复杂对象。ConcreteBuilder 创建该产品的内部表示并定义它的装配日过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
要建造的具体产品
/**
* 具体产品类(这里以创建一个布娃娃为例)
*/
public class RagdollProduct {
// 头
private String head; //可以是任意类型
// 身体
private String body;
// 胳膊
private String arm;
// 腿
private String leg;
// get、set、toString 省略...
}
抽象建造者与具体建造者【抽象建造者中定义了产品的创建方法和返回方法;具体建造者类中实现了抽象建造者类的抽象接口,构建和装配各个部件】
/**
* 定义产品的创建方法和返回方法
*/
public abstract class Builder {
protected RagdollProduct product = new RagdollProduct();
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildArm();
public abstract void buildLeg();
public RagdollProduct getResult()
{
return product;
}
}
/**
* 实现各个部分的装配方法
*/
public class BuilderAdapter extends Builder {
@Override
public void buildHead() {
product.setHead("布娃娃头");
System.out.println("添加布娃娃的头...");
}
@Override
public void buildBody() {
product.setBody("布娃娃身体");
System.out.println("添加布娃娃的身体...");
}
@Override
public void buildArm() {
product.setArm("布娃娃胳膊");
System.out.println("添加布娃娃的胳膊...");
}
@Override
public void buildLeg() {
product.setLeg("布娃娃腿");
System.out.println("添加布娃娃的退...");
}
}
指挥者类(Director),该类的主要作用有两个;一方面,它隔离了客户与生产过程;另一方面,它负责控制产品的生产过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
/**
* 指挥者类
*/
public class Director {
private Builder builder;
// 构造方法注入builder 对象
public Director( Builder builder ){
this.builder = builder;
}
// 定义指挥者创建一个布娃娃的过程
public RagdollProduct construct(){
builder.buildHead();
builder.buildBody();
builder.buildArm();
builder.buildLeg();
return builder.getResult();
}
}
测试
public class Test {
public static void main(String[] args) {
Builder builder = new BuilderAdapter();
Director director = new Director(builder);
RagdollProduct construct = director.construct();
System.out.println("一个完整的布娃娃:" + construct);
}
}
优点:
缺点:
加入现在需要增加创建产品的一个细节,
适用范围
标签:pre 变化 bst lang tle head 构造方法 info protect
原文地址:https://www.cnblogs.com/zhaoqiang-lab/p/13195048.html