文档章节

创建型模式之四:建造者模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:35
字数 516
阅读 18
收藏 0

建造者模式的关键特征是他涉及一个逐步的过程去构建东西。例如,每个产品会通过相同的过程,不同的是过程中的步骤不同。 在下面的例子中,我们能定义一个饮料的建造者叫StarbuscksBuilder,他将通过一系列的步骤来建造一杯叫Starbucks的饮料,像buildSize()方法和buildDrink方法,最后会返回已建造的饮料。

建造者模式类图

建造者模式Java代码

1
package designpatterns.builder;
 
// produce to be built
class Starbucks {
 private String size;
 private String drink;
 
 public void setSize(String size) {
 this.size = size;
 }
 
 public void setDrink(String drink) {
 this.drink = drink;
 }
}
 
//abstract builder
abstract class StarbucksBuilder {
 protected Starbucks starbucks;
 
 public Starbucks getStarbucks() {
 return starbucks;
 }
 
 public void createStarbucks() {
 starbucks = new Starbucks();
 System.out.println("a drink is created");
 }
 
 public abstract void buildSize();
 public abstract void buildDrink();
}
 
// Concrete Builder to build tea
class TeaBuilder extends StarbucksBuilder {
 public void buildSize() {
 starbucks.setSize("large");
 System.out.println("build large size");
 }
 
 public void buildDrink() {
 starbucks.setDrink("tea");
 System.out.println("build tea");
 }
 
}
 
// Concrete builder to build coffee
class CoffeeBuilder extends StarbucksBuilder {
 public void buildSize() {
 starbucks.setSize("medium");
 System.out.println("build medium size");
 }
 
 public void buildDrink() {
 starbucks.setDrink("coffee");
 System.out.println("build coffee");
 }
}
 
//director to encapsulate the builder
class Waiter {
 private StarbucksBuilder starbucksBuilder;
 
 public void setStarbucksBuilder(StarbucksBuilder builder) {
 starbucksBuilder = builder;
 }
 
 public Starbucks getstarbucksDrink() {
 return starbucksBuilder.getStarbucks();
 }
 
 public void constructStarbucks() {
 starbucksBuilder.createStarbucks();
 starbucksBuilder.buildDrink();
 starbucksBuilder.buildSize();
 }
}
 
//customer
public class Customer {
 public static void main(String[] args) {
 Waiter waiter = new Waiter();
 StarbucksBuilder coffeeBuilder = new CoffeeBuilder();
 
 //Alternatively you can use tea builder to build a tea
 //StarbucksBuilder teaBuilder = new TeaBuilder();
 
 waiter.setStarbucksBuilder(coffeeBuilder);
 waiter.constructStarbucks();
 
 //get the drink built
 Starbucks drink = waiter.getstarbucksDrink();
 
 }
}

在java标准库中,StringBuilder 继承了 AbstractStringBuilder

StringBuilder strBuilder= new StringBuilder();
strBuilder.append("one");
strBuilder.append("two");
strBuilder.append("three");
String str= strBuilder.toString();

这个append()是过程中的一步,就像在Starbucks例子中的一步,toString()方法是最后一步,但是不同的是这是没有图中的waiter,在上图的建造者模式中waiter类扮演了一个导演的角色,但是这是没有这样的角色,所以他不是建造者模式。 当然,这不是唯一的原因,我们能对比类图的开始,并找到其他原因。 建造者模式用于,当需要许多步来构造一个对象,工厂模式用于,当很容易在一个方法中就构建一个实体对象。 

以上文章翻译自: http://www.programcreek.com/2013/02/java-design-pattern-builder/

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
【设计模式】建造者模式 Builder Pattern

前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的...

风之源
08/04
0
0
设计模式快速学习(四)建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂的构建与其表示相分离,使...

微笑面对Life
08/15
0
0
创建型模式--建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后...

shanxi_liyong
2014/12/23
0
0
炒冷饭系列:设计模式 建造者模式

炒冷饭系列:设计模式 建造者模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 亲爱我,孝何难;亲恶我,孝方贤。 一、什么是建造者模式 ...

泥沙砖瓦浆木匠
2014/07/28
0
0
设计模式(创建型模式)——建造者模式(Builder)

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后...

小风89
2016/07/18
4
0

没有更多内容

加载失败,请刷新页面

加载更多

macOs-挂载能读写的NTFS硬盘

转自:https://nicklinyi.gitee.io/blog/2018/04/macOS-ntfs.html Mac本身是支持NTFS写入的,只是NTFS是微软开发,由于版权和技术细节原因,苹果不愿公开说自己支持NTFS写入,也是有自己以后...

北风刮的不认真了
8分钟前
1
0
Namespace 命名空间

命名空间可以定义为一种封装方式。 为了解决开发中库和程序中可重用类和方法问题: 1.解决 PHP内部方法类/方法/常量 或者第三方 类/方法/常量之间的命名冲突 2.能够简化为了防止命名冲突而给...

忙碌的小蜜蜂
11分钟前
0
0
CDH的坑之Deploy Client Configuration Failed

Deploy Client Configuration Failed 1.问题描述 当使用CDH增添spark服务的时候,出现了以下错误: Faile to deploy client configuration to the cluster. 具体如下图: 2.思路 网上查了...

星汉
12分钟前
1
0
java guava 集合的操作:交集、差集、并集

Guava:google的工程师利用传说中的“20%时间”开发的集合库,它是对jdk提供的扩展,提供了很多实用的类来简化代码。 开源地址:https://github.com/google/guava jar包下载:http://maven....

帅的不像男的
13分钟前
1
0
从八个层面比较分析 Java 8, RxJava, Reactor

响应式编程在单机环境下是否鸡肋? 结论是:没有结论,我觉得只能抱着怀疑的眼光审视这个问题了。另外还聊到了 RSocket 这个最近在 SpringOne 大会上比较火爆的响应式”新“网络协议,githu...

小刀爱编程
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部