语言与模式-05生成器模式
来源:互联网 发布:图片文件格式软件安装 编辑:程序博客网 时间:2024/06/18 14:36
意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
Java实现
// 待构建产品class Starbucks { private String size; private String drink; public void setSize(String size) { this.size = size; } public void setDrink(String drink) { this.drink = drink; }}
//抽象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();}
// 泡茶builderclass 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"); }}
// 泡咖啡builderclass 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"); }}
//指导如何封装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();}
}
//客户
public class Customer {
public static void main(String[] args) {
Waiter waiter = new Waiter();
StarbucksBuilder coffeeBuilder = new CoffeeBuilder();
//也可以用泡茶builder沏茶 //StarbucksBuilder teaBuilder = new TeaBuilder(); waiter.setStarbucksBuilder(coffeeBuilder); waiter.constructStarbucks(); //取到饮料 Starbucks drink = waiter.getstarbucksDrink();}
}
# Clojure实现在Clojure里也是个没必要的模式!因为根本就不需要构建对象啊!可以使用multimethod模拟,或者直接简单模拟如下:
(defn type [d t]
(assoc d :type t))
(defn size [d t]
(assoc d :size t))
(def drink {})
(-> drink (type :tea) (size :large))
“`
0 0
- 语言与模式-05生成器模式
- 生成器模式与抽象工厂模式使用
- 抽象工厂模式与生成器模式比较
- Builder生成器模式与Composite组合模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 生成器模式
- 语言与模式-03抽象工厂模式
- javascript内存泄露
- 语言与模式-04原型模式
- TCP与UDP的区别
- 什么是spring?
- 语言与模式-05生成器模式
- Java 各版本API文档 JDK1.5 JDK1.6 JDK1.7 没事看看
- 从程序员到项目经理
- 学习心得体会(针对于女孩子)
- linux下tomcat删除文件命令集合
- hdu1575---Tr A
- Makefile中的wildcard & patsubst的用法
- 言与模式-06门面模式
- imagejpeg使用 图像...因存在错误而无法显示