博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建型模式之四:建造者模式
阅读量:6347 次
发布时间:2019-06-22

本文共 2562 字,大约阅读时间需要 8 分钟。

  hot3.png

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

建造者模式类图

建造者模式Java代码

1package designpatterns.builder; // produce to be builtclass Starbucks { private String size; private String drink;  public void setSize(String size) { this.size = size; }  public void setDrink(String drink) { this.drink = drink; }} //abstract builderabstract 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 teaclass 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 coffeeclass 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 builderclass 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(); }} //customerpublic 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类扮演了一个导演的角色,但是这是没有这样的角色,所以他不是建造者模式。 当然,这不是唯一的原因,我们能对比类图的开始,并找到其他原因。 建造者模式用于,当需要许多步来构造一个对象,工厂模式用于,当很容易在一个方法中就构建一个实体对象。 

以上文章翻译自:

转载于:https://my.oschina.net/markho/blog/498172

你可能感兴趣的文章
Activiti 实战篇 小试牛刀
查看>>
java中的Static class
查看>>
Xshell 连接CentOS服务器解密
查看>>
[工具类]视频音频格式转换
查看>>
GNS3与抓包工具Wireshark的关联
查看>>
groovy-语句
查看>>
VIM寄存器使用
查看>>
Java VisualVM远程监控JVM
查看>>
nasm预处理器(2)
查看>>
二叉排序树 算法实验
查看>>
Silverlight 5 beta新特性探索系列:10.浏览器模式下内嵌HTML+浏览器模式下创建txt文本文件...
查看>>
YourSQLDba 配置——修改备份路径
查看>>
nginx web服务理论与实战
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>
ES6 - 函数与剩余运算符
查看>>
你对position了解有多深?看完这2道有意思的题你就有底了...
查看>>
WebSocket跨域问题解决
查看>>
ECMAScript6基本介绍
查看>>
世界经济论坛发布关于区块链网络安全的报告
查看>>