(四)、建造者模式
来源:互联网 发布:hough变换检测圆算法 编辑:程序博客网 时间:2024/05/17 20:00
一、简介:
在软件设计中,有时候面临一个“复杂对象”的创建工作,其通常由各个部分的子对象用一定算法构成;
由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合到一起的算法稳定。
二、 建造者的具体体现
例如:电脑城的老板是直接和客户联系的,然而电脑的组装是由老板指挥装机人员去把电脑的各个部分
组装起来,真正负责创建电脑的人就是电脑城的装机人员,了解这些逻辑之后,下面就具体看下如何用
代码实现生活中的逻辑过程:
/** *客户类. */public class Customer { public static void main(String[] args) { //客户找到电脑城老板说要买电脑,这里要装两台电脑 //创建指挥者和构建者 Director director = new Director(); Builder builder1=new ConcreateBuilder1(); Builder builder2=new ConcreateBuilder2(); //老板叫员工去组装一台电脑 director.buildeComputer(builder1); //组装完之,组装人员搬来组装好的电脑 Computer computer1 = builder1.getComputer(); computer1.show(); //老板叫员工去组装第二台电脑 director.buildeComputer(builder2); //组装完之后,组装人员搬来组装好的电脑 Computer computer2 = builder2.getComputer(); computer2.show(); }}/** * 小王和小李都是电脑组装工,谁都不会自愿的去组装,这必须有一个 * 人叫他们去组装才会去,当然这就是老板了,也就是建造者模式中的 * 指挥者,指挥创建过程类 */public class Director { //组装电脑 public void buildeComputer(Builder builder) { builder.buildPartCpu(); builder.buildPartCpu(); }}/** * 抽象建造者,这个场景下为"组装人",这里也可以定义为接口 */public abstract class Builder { //组装cpu protected abstract void buildPartCpu(); //组装主板 protected abstract void buildPartMainBoard(); //组装还有硬盘,电源。。。 //组装好了电脑 protected abstract Computer getComputer();}/** * 电脑类. */public class Computer { //电脑组件集合 private List<String> parts=new ArrayList<String>(); //把单个组件添加到电脑组件集合中去 public void add(String part){ parts.add(part); } public void show(){ System.out.println("电脑组装开始"); for (String str : parts){ System.out.println(str); } System.out.println("电脑组装好了。"); }}/** *具体创建者,具体的某个人为具体创建者,例如:装机小李 */public class ConcreateBuilder1 extends Builder { Computer computer = new Computer(); @Override protected void buildPartCpu() { computer.add("cpu1"); } @Override protected void buildPartMainBoard() { computer.add("mainBoard1"); } @Override protected Computer getComputer() { return computer; }}/** *具体创建者,具体的某个人为具体创建者,例如:装机小王 */public class ConcreateBuilder2 extends Builder { Computer computer = new Computer(); @Override protected void buildPartCpu() { computer.add("cpu2"); } @Override protected void buildPartMainBoard() { computer.add("mainBoard2"); } @Override protected Computer getComputer() { return computer; }}运行结果:电脑组装开始cpu1cpu1电脑组装好了。电脑组装开始cpu2cpu2电脑组装好了。
三、建造者模式的定义和类图
四、建造者在java代码中的具体体现
StringBuilder类扮演着建造string对象的具体建造者角色,其中ToString()方法用来返回具体产品
给客户端(相当于上面代码中getComputer方法)。其中Append方法用来创建产品的组件(相当于
上面代码中BuildPartA和BuildPartB方法),因为string对象中每个组件都是字符,所以也就不需
要指挥者的角色的代码(指的是buildeComputer方法,用来调用创建每个组件的方法来完成整个产品的组装),
因为string字符串对象中每个组件都是一样的,都是字符,所以Append方法也充当了指挥者buildeComputer方法的作用。
五、总结
优点:
Builder模式解决的是: “分步骤构建一个复杂的对象,组合在一起的算法相对稳定”,而复杂对象的各个部分经常变化。
抽象工厂模式:解决系列对象的需求变化。
缺点:
Builder模式难以应对”分步构建算法的需求变动“。;
阅读全文
0 0
- (四)、建造者模式
- 设计模式(四)--建造者模式
- 设计模式(四) 建造者模式
- 设计模式(四):建造者模式
- 设计模式(四)建造者模式
- 设计模式之(四)--建造者模式(builder)
- 设计模式(四)——建造者模式(Builder)
- 四、创建型模式:建造者模式(BUILDER)
- 设计模式之(四)——建造者模式
- JAVA--建造者模式(Builder)--设计模式四
- 设计模式系列(四)建造者模式Builder
- 设计模式(四)——建造者模式
- 设计模式学习(四)之建造者模式
- java设计模式(四)——建造者模式
- 四:创建型模式:建造者模式
- 设计模式笔记四:建造者模式
- 设计模式之建造者模式(四)
- 设计模式之------创建型模式(四)-----建造者模式(Builder)
- 触发器调用带有参数的存储过程不能使数据同步的问题
- 透过F5获取服务器真实内网IP
- 单调栈 poj2796
- 盒子趣题
- 普通视图和物化视图的区别
- (四)、建造者模式
- 数据库基础知识
- php数据替换处理str_replace()函数
- 在java中int类型跟byte数组的转换
- qduoj 河神的难题 思维 实验室腊新呐 枚举
- 用java写websocket客户端
- [AHK]Bing Desktop Wallpaper Changer(必应壁纸随心换)
- JDK动态代理源码分析之二
- 正则表达式匹配