个人对设计模式的理解-->建造者模式
2016-04-18 19:55
363 查看
概念:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
对于概念,有点抽象,不是很容易理解。下面举个例子关于个人对建造者模式的理解。
比如奶茶店,会卖各种口味的奶茶和饮料,比如有红豆味,原味的,巧克力的,而制作奶茶的步骤都是类似,先放原料,再加糖,再加开水,小型的奶茶店,这些操作
由一个奶茶mm负责完成。大型的奶茶店,有负责各种口味的奶茶mm,我们去买奶茶,只需要告诉收银员要什么口味的并且付完钱。builder模式就是为了将做奶茶所需的原料和
过程分开,奶茶mm即是建造者。
代码如下:
输出结果如下:
=======购买红豆味的=======
加红豆
加糖
加水
红豆味的做完
=======购买奶茶味的=======
加草莓原料
加水
加糖
草莓味的做完
总结:建造者模式是对工厂模式的扩展,工厂类提供了生产单个产品的功能,而建造者模式则可以将各个产品集中统一管理。
区别: 工厂模式关注的是整个产品。
建造者模式关注的是产品各组成部分的创建过程。
对于概念,有点抽象,不是很容易理解。下面举个例子关于个人对建造者模式的理解。
比如奶茶店,会卖各种口味的奶茶和饮料,比如有红豆味,原味的,巧克力的,而制作奶茶的步骤都是类似,先放原料,再加糖,再加开水,小型的奶茶店,这些操作
由一个奶茶mm负责完成。大型的奶茶店,有负责各种口味的奶茶mm,我们去买奶茶,只需要告诉收银员要什么口味的并且付完钱。builder模式就是为了将做奶茶所需的原料和
过程分开,奶茶mm即是建造者。
代码如下:
<pre name="code" class="java">package com.tc.gof.builder; /** * 抽象类奶茶 需要实现三个步骤才能完成 放原料、加糖、加开水 * */ public abstract class Tea { // 第一步 加原料 protected abstract void addMaterial(); // 第二步 加糖 protected abstract void addSugar(); // 第三步 加开水 protected abstract void addWater(); /** * 默认步骤 * @return */ public final Tea defaultTea(){ addMaterial(); addSugar(); addWater(); return this; } }
package com.tc.gof.builder; /** * 红豆味奶茶 * */ public class RedBeanTea extends Tea { @Override protected void addMaterial() { System.out.println("加红豆"); } @Override protected void addSugar() { System.out.println("加糖"); } @Override protected void addWater() { System.out.println("加水"); } }
package com.tc.gof.builder; /** *草莓味的奶茶 * */ public class StrawberryTea extends Tea { @Override protected void addMaterial() { System.out.println("加草莓原料"); } @Override protected void addSugar() { System.out.println("加糖"); } @Override protected void addWater() { System.out.println("加水"); } }
package com.tc.gof.builder; /** * 做红豆奶茶的mm * */ public class RedBeanBuilder extends AbstractBuilder { private Tea tea = new RedBeanTea(); @Override public void buildPart() { // 加原料 tea.addMaterial(); // 加糖 tea.addSugar(); // 加水 tea.addWater(); } @Override public Tea buildProduct() { System.out.println("红豆味的做完"); return tea; } }
package com.tc.gof.builder; /** * 做草莓味奶茶的mm * */ public class StrawberryBuilder extends AbstractBuilder { private Tea tea = new StrawberryTea(); @Override public void buildPart() { // 加原料 tea.addMaterial(); // 加水 这里先加水 tea.addWater(); // 问顾客是否加糖 tea.addSugar(); } @Override public Tea buildProduct() { System.out.println("草莓味的做完"); return tea; } }
package com.tc.gof.builder; /** * 收银员 * */ public class Cashier { // 两名奶茶mm private AbstractBuilder redBeanBuilder = new RedBeanBuilder(); private AbstractBuilder strawberryBuilder = new StrawberryBuilder(); /** * 购买红豆味的 * @return */ public Tea getRedBeanTea(){ redBeanBuilder.buildPart(); return redBeanBuilder.buildProduct(); } /** * 购买草莓味的 * @return */ public Tea getStrawberryTea(){ strawberryBuilder.buildPart(); return strawberryBuilder.buildProduct(); } }
package com.tc.gof.builder; public class BuilderTest { public static void main(String[] args) { Cashier cashier = new Cashier(); System.out.println("=======购买红豆味的======="); cashier.getRedBeanTea(); System.out.println("=======购买奶茶味的======="); cashier.getStrawberryTea(); } }
输出结果如下:
=======购买红豆味的=======
加红豆
加糖
加水
红豆味的做完
=======购买奶茶味的=======
加草莓原料
加水
加糖
草莓味的做完
总结:建造者模式是对工厂模式的扩展,工厂类提供了生产单个产品的功能,而建造者模式则可以将各个产品集中统一管理。
区别: 工厂模式关注的是整个产品。
建造者模式关注的是产品各组成部分的创建过程。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序