Java学习笔记——设计模式之九.建造者模式

 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Product类:

 1 package cn.happy.design_pattern._09builder;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Product {
 7 
 8     List<String> parts = new ArrayList<>();
 9     
10     public void add(String part){
11         parts.add(part);
12     }
13     
14     public void show(){
15         System.out.println("创建产品...");
16         for (String item : parts) {
17             System.out.println(item);
18         }
19     }
20 }

Builder类:

1 package cn.happy.design_pattern._09builder;
2 
3 public abstract class Builder {
4 
5     public abstract void BuildPartA();
6     public abstract void BuildPartB();
7     public abstract Product GetResult();
8 }

Builder子类:

 1 package cn.happy.design_pattern._09builder;
 2 
 3 public class ConcreteBuilder1 extends Builder {
 4 
 5     private Product product = new Product();
 6     @Override
 7     public void BuildPartA() {
 8         product.add("部件A");
 9 
10     }
11 
12     @Override
13     public void BuildPartB() {
14         product.add("部件B");
15 
16     }
17 
18     @Override
19     public Product GetResult() {
20         // TODO Auto-generated method stub
21         return product;
22     }
23 
24 }
25 
26 public class ConcreteBuilder2 extends Builder {
27 
28     private Product product = new Product();
29     @Override
30     public void BuildPartA() {
31         product.add("部件X");
32 
33     }
34 
35     @Override
36     public void BuildPartB() {
37         product.add("部件Y");
38 
39     }
40 
41     @Override
42     public Product GetResult() {
43         // TODO Auto-generated method stub
44         return product;
45     }
46 
47 }

Director类:

1 package cn.happy.design_pattern._09builder;
2 
3 public class Director {
4 
5     public void Construct(Builder builder){
6         builder.BuildPartA();
7         builder.BuildPartB();
8     }
9 }

测试类:

 1 package cn.happy.design_pattern._09builder;
 2 
 3 public class Mmain {
 4     public static void main(String[] args) {
 5         Director director = new Director();
 6         Builder b1 = new ConcreteBuilder1();
 7         Builder b2 = new ConcreteBuilder2();
 8         director.Construct(b1);
 9         b1.GetResult().show();
10         director.Construct(b2);
11         b2.GetResult().show();
12     }
13 }
原文地址:https://www.cnblogs.com/tomasman/p/7044543.html