UML类图

建造者模式

代码示例

  • Product

/**
* 表示具体的产品,由多个部件组成
*/
public class Product {

/**
* 存放产品每个部件的集合
*/
private List<String> parts = new LinkedList<>();

/**
* 添加某一部件到该集合中
*
* @param part
*/
void addPart(String part) {
parts.add(part);
}

/**
* 展示产品的部件组成
*/
void show() {
parts.forEach(part -> System.out.print(part + " "));
}

}
  • Builder
/**
* 抽象建造者,用于确定产品的组成及获取
*/
public interface Builder {

/**
* 部件A
*/
void partA();

/**
* 部件B
*/
void partB();

/**
* 获取产品
*
* @return
*/
Product getProduct();

}
  • BuilderImpl
/**
* 具体建造者
*/
public class BuilderImpl implements Builder {

private Product product = new Product();

@Override
public void partA() {
product.addPart("部件A");
}

@Override
public void partB() {
product.addPart("部件B");
}

@Override
public Product getProduct() {
return product;
}

}
  • Director
/**
* 指挥者类(控制建造流程)
*/
public class Director {

/**
* 控制并构造所需产品的最终形态
*
* @param builder
*/
void buildProduct(Builder builder) {
builder.partB();
builder.partA();
}

}
  • 测试
public class Main {

public static void main(String[] args) {
// 指挥者
Director director = new Director();
Builder builder = new BuilderImpl();
// 指挥者调用所控制的建造过程
director.buildProduct(builder);

// 建造完成后返回最终产品
Product product = builder.getProduct();
// 调用展示
product.show();
}

}

总结思考

  建造者模式中,一些基本部件的实现应该是不怎么变化的,它更关注于指挥者装配并组合部件的过程,对应生活中的KFC,汉堡、可乐、薯条等是不变的,而其组合是经常变化的,演变出各式各样的套餐。

示例代码

最后更新: 2018年09月29日 11:20

原始链接: https://blog.mariojd.cn/builder-of-design-pattern.html

× 支持创作
打赏二维码