模式意图
一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。
模式结构
Builder 抽象建造者接口,规范各个组成部分的构建。
ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。
Product 产品角色,创建返回的对象。
Director 导演者角色,负责创建以及使用。
使用场景
1 当创建对象复杂并且与其使用过程独立。
2 构造过程允许构造的对象有不同的表示。
代码结构
Builder接口
1 abstract class Builder{ 2 public abstract void buildPart1(); 3 public abstract void buildPart2(); 4 public abstract Product retrieveResult(); 5 }
ConcreteBuilder 具体产品
1 class ConcreteBuilder extends Builder{ 2 public void buildPart1() { 3 4 } 5 public void buildPart2() { 6 7 } 8 public Product retrieveResult() { 9 return null; 10 } 11 }
Product 产品
1 class Product{ 2 //Anything 3 }
Director 导演者角色
1 class Director{ 2 private Builder builder; 3 public void Constructor(){ 4 builder = new ConcreteBuilder(); 5 builder.buildPart1(); 6 builder.buildPart2(); 7 builder.retrieveResult(); 8 } 9 }
生活中的设计模式
‘ 近年来,变形金刚4出了也快半年了,但是还是喜欢第一部的女主角。
而擎天柱队长,经典的台词,“汽车人变身”也是伴随着复杂的变化过程。而汽车人的转变只在一瞬之间,看起来行云流水,这就有点创建者的味道。擎天柱的各个身体部分经过复杂的变化,最后变身成为汽车人。
1 /** 2 * Builder 3 */ 4 interface Transformer{ 5 public void Create_Head(); 6 public void Create_Body(); 7 8 public Autobots transforming(); 9 } 10 /** 11 * ConcreteBuilder 12 */ 13 class Transformer_Captain implements Transformer{ 14 public void Create_Head() { 15 System.out.println("变形出脑袋..."); 16 } 17 public void Create_Body() { 18 System.out.println("变形出身体..."); 19 } 20 public Autobots transforming() { 21 return new Autobots(); 22 } 23 } 24 /** 25 * Product 26 */ 27 class Autobots{ 28 Autobots(){ 29 System.out.println("啊!...变形金刚 变身...."); 30 } 31 } 32 /** 33 * 这个类当做Director 34 */ 35 public class TransformerBuilder { 36 37 public static Autobots Transforming(Transformer optimusPrime){ 38 optimusPrime.Create_Head(); 39 optimusPrime.Create_Body(); 40 return optimusPrime.transforming(); 41 } 42 43 public static void main(String[] args){ 44 Transformer optimusPrime = new Transformer_Captain(); 45 Transforming(optimusPrime); 46 } 47 48 }
变身结果
变形出脑袋... 变形出身体... 啊!...变形金刚 变身....
本文转自博客园xingoo的博客,原文链接:【设计模式】—— 创建者模式Builder,如需转载请自行联系原博主。
时间: 2024-09-13 12:52:37