设计模式--建造者模式--简记
建造者(Builder)模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
通常包括的角色:
1.Builder:给出一个抽象的接口,以规范产品对象的各个组成成分的建造。
这个接口规定要实现复杂对象的哪些部分的创建,不涉及具体的对象部件的创建。
2.ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造完成后,提供产品的实例。
3.Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4.Product:要创建的复杂的对象
使用场景:
1.需要生成的对象具有复杂的内部结构
2.需要生成的对象内部属性本身相互依赖
1 //要创建的复杂对象:Product 2 //建立一个人物对象Person 3 public class Person { 4 5 private String head; 6 private String body; 7 private String foot; 8 9 public String getHead() { 10 return head; 11 } 12 13 public void setBody(String head) { 14 this.head = head; 15 } 16 17 public String getHead() { 18 return body; 19 } 20 21 public void setBody(String body) { 22 this.body = body; 23 } 24 25 public String getFoot() { 26 return foot; 27 } 28 29 public void setFoot(String foot) { 30 this.foot = foot; 31 } 32 33 } 34 35 36 //定义一个抽象接口:Builder 37 public interface PersonBuilder { 38 void buildHead(); 39 void buildBody(); 40 void buildFoot(); 41 Person buildPerson(); 42 } 43 44 45 //实现Builder接口:ConcreteBuilder 46 public class ManBuilder implements PersonBuilder { 47 48 Person person; 49 50 public ManBuilder() { 51 person = new Person(); 52 } 53 54 public void buildHead() { 55 person.setHead("build head"); 56 } 57 58 public void buildBody() { 59 person.setHead("build body"); 60 } 61 62 public void buildFoot() { 63 person.setHead("build foot"); 64 } 65 66 public Person buildPerson() { 67 return person; 68 } 69 70 } 71 72 73 //调用构造者来创建复杂对象的各个部分:Director 74 public class PersonDirector { 75 public Person constructPerson(PersonBuilder personBuilder) { 76 personBuilder.buildHead(); 77 personBuilder.buildBody(); 78 personBuilder.buildFoot(); 79 return personBuilder.buildPerson(); 80 } 81 } 82 83 84 //Test 85 public class Test { 86 87 public static void main(String[] args) { 88 PersonDirector pd = new PersonDirector(); 89 Person person = pd.constructPerson(new ManBuilder()); 90 System.out.println(person.getHead()); 91 System.out.println(person.getBody()); 92 System.out.println(person.getFoot()); 93 } 94 95 }
详情:https://www.cnblogs.com/kangsir/p/6653233.html