文档章节

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

奋斗到天明
 奋斗到天明
发布于 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)

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

shanxi_liyong
2014/12/23
0
0
设计模式快速学习(四)建造者模式

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

微笑面对Life
08/15
0
0
炒冷饭系列:设计模式 建造者模式

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

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

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

小风89
2016/07/18
4
0

没有更多内容

加载失败,请刷新页面

加载更多

7个习惯提升python效率

1. 使用本地变量 尽量使用局部变量,避免使用全局变量 2.减少函数调用 (1)当我们判断对象的类别的时候,尽量使用isinstance(),其次使用id(),最不济使用type()   type(num)==type(0) type(...

糖宝lsh
4分钟前
0
0
mongodb使用

【mongodb全库备份:】 #cd /usr/local/mongodb/bin # ./mongodump 则会在当前目录生成一个dump目录,整个库会备份在这个目录下。 【指定数据库备份】 # ./mongodump -h localhost -d Hawkey...

硅谷课堂
8分钟前
0
0
hive count distinct和group by

首先,Hive的group by和count(distinct)都是去除重复的数据,某种程度上来说,两者产生的结果是一样的。 实例代码: select a,count(distinct b) from t group by aselect tt.a,count(tt...

张欢19933
12分钟前
0
0
day180-2018-12-17-英语流利阅读-待学习

“黄马甲”再上巴黎街头,马克龙成为众矢之的 毛西 2018-12-17 1.今日导读 圣诞将至,但此时的法国人都在担心周六的到来,因为巴黎的“黄背心”抗议活动已经连续进行了四周,举国上下人心惶惶...

飞鱼说编程
14分钟前
6
0
Deepin 下安装 Docker

Docker官网上并没有提供关于 Deepin 的 Docker 安装教程,由于 Deepin 是基于 Debian 的,所以可以参照官网 Debian的安装教程安装,但 Deepin 在定制过程中进行了大量修改,所以使用官方教程...

临江仙卜算子
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部