建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
建造者模式一步一步地创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
- // 'Product' 类
- public class Product {
- private String partA;
- private String partB;
- private String partC;
-
- public void setPartA(String partA) {
- this.partA = partA;
- }
-
- public void setPartB(String partB) {
- this.partB = partB;
- }
-
- public void setPartC(String partC) {
- this.partC = partC;
- }
-
- public void showProduct() {
- System.out.println("Part A: " + partA);
- System.out.println("Part B: " + partB);
- System.out.println("Part C: " + partC);
- }
- }
-
- // 'Builder' 抽象接口
- public interface Builder {
- void buildPartA();
- void buildPartB();
- void buildPartC();
-
- Product getProduct();
- }
-
- // 'ConcreteBuilder1' 类
- public class ConcreteBuilder1 implements Builder {
- private Product product = new Product();
-
- @Override
- public void buildPartA() {
- product.setPartA("This is part A.");
- }
-
- @Override
- public void buildPartB() {
- product.setPartB("This is part B.");
- }
-
- @Override
- public void buildPartC() {
- product.setPartC("This is part C.");
- }
-
- @Override
- public Product getProduct() {
- return product;
- }
- }
- // 'ConcreteBuilder2' 类
- public class ConcreteBuilder2 implements Builder {
- private Product product = new Product();
-
- @Override
- public void buildPartA() {
- product.setPartA("This is part A.");
- }
-
- @Override
- public void buildPartB() {
- product.setPartB("This is part B.");
- }
-
- @Override
- public void buildPartC() {
- product.setPartC("This is part C.");
- }
-
- @Override
- public Product getProduct() {
- return product;
- }
- }
- // 'Director' 类
- public class Director {
- private Builder builder;
-
- public Director(Builder builder) {
- this.builder = builder;
- }
-
- public void constructProduct() {
- builder.buildPartA();
- builder.buildPartB();
- builder.buildPartC();
-
- Product product = builder.getProduct();
- product.showProduct();
- }
- }
- // 客户端代码
- public class Client {
- public static void main(String[] args) {
- Builder builder1 = new ConcreteBuilder1();
- Director director1 = new Director(builder1);
- director1.constructProduct();
-
- Builder builder2 = new ConcreteBuilder2();
- Director director2 = new Director(builder2);
- director2.constructProduct();
- }
- }