《设计模式》第三章——Builder模式
来源:互联网 发布:宁波seo教程 编辑:程序博客网 时间:2024/05/17 19:59
一、典型的应用场景
有几个不同的产品,它们由各自需要的部件组成,它们使用这些部件构造最终产品的接口是一致的,那么可以把这些一致的接口提炼出来
注意,在Builder模式中,对于不同的产品,没有需要共同的产品父类的限制,对于它们的组成部件也没有需要共同的部件父类的限制
如果需要得到最终的产品,得经过类型判断,得到具体的Builder类,然后再得到最终的产品
二、结构图
三、优缺点
将“构造过程”和“产品、部件的内部表示和装配过程”分开,客户不需要知道定义产品内部结构的所有类的信息
2)Builder模式跟用产品的构造方法来构造产品的方式的一点区别:用构造方法构造产品,那么使用哪些部件都是写死的;而用Builder模式可以自己决定使用哪些部件,部件的数量等等
3)Abstract Factory模式和Builder模式:Abstract Factory模式着重于多个系列的产品,Builder模式着重于一步步构造一个对象
有几个不同的产品,它们由各自需要的部件组成,它们使用这些部件构造最终产品的接口是一致的,那么可以把这些一致的接口提炼出来
注意,在Builder模式中,对于不同的产品,没有需要共同的产品父类的限制,对于它们的组成部件也没有需要共同的部件父类的限制
如果需要得到最终的产品,得经过类型判断,得到具体的Builder类,然后再得到最终的产品
二、结构图
三、优缺点
将“构造过程”和“产品、部件的内部表示和装配过程”分开,客户不需要知道定义产品内部结构的所有类的信息
四、代码实例
package designPattern;interface Builder { void buildHead(); void buildBody();}class HumanBuilder implements Builder { Human human; public HumanBuilder() { human = new Human(); } public void buildHead() { Head head = new Head(); human.setHead(head); } public void buildBody() { Body body = new Body(); human.setBody(body); } public Human getHuman() { return human; } static class Human { Head head; Body body; public void setHead(Head head) { this.head = head; } public void setBody(Body body) { this.body = body; } public String toString() { return "I am a human " + this.head.toString() + " " + this.body.toString(); } } static class Head { public String toString() { return "I am a Head"; } } static class Body { public String toString() { return "I am a Body"; } }}class ComputerBuilder implements Builder { Computer computer; public ComputerBuilder() { computer = new Computer(); } public void buildHead() { CPU cpu = new CPU(); computer.setCPU(cpu); } public void buildBody() { MainBoard mainBoard = new MainBoard(); computer.setMainBoard(mainBoard); } public Computer getComputer() { return computer; } static class Computer { CPU cpu; MainBoard mainBoard; public void setCPU(CPU cpu) { this.cpu = cpu; } public void setMainBoard(MainBoard mainBoard) { this.mainBoard = mainBoard; } public String toString() { return "I am a computer " + this.cpu.toString() + " " + this.mainBoard.toString(); } } static class CPU { public String toString() { return "I am a CPU"; } } static class MainBoard { public String toString() { return "I am a MainBoard"; } }}public class BuilderExample { public static void main(String[] args) { HumanBuilder humanBuilder = new HumanBuilder(); execute(humanBuilder); System.out.println(humanBuilder.getHuman()); ComputerBuilder computerBuilder = new ComputerBuilder(); execute(computerBuilder); System.out.println(computerBuilder.getComputer()); } public static void execute(Builder builder) { builder.buildHead(); builder.buildBody(); }}
备注:
1)在书中的构造迷宫的例子中,MazeBuilder中的GetMaze()接口其实是不需要的,Builder模式的返回产品的接口都是在具体Builder类中定义的,无需在抽象Builder类中定义,因为不同的具体Builder类返回的产品可以完全不同,而没有共同的产品父类,因此在抽象Builder类中定义返回产品的接口是实现不了的
2)Builder模式跟用产品的构造方法来构造产品的方式的一点区别:用构造方法构造产品,那么使用哪些部件都是写死的;而用Builder模式可以自己决定使用哪些部件,部件的数量等等
3)Abstract Factory模式和Builder模式:Abstract Factory模式着重于多个系列的产品,Builder模式着重于一步步构造一个对象
0 0
- 《设计模式》第三章——Builder模式
- 设计模式8—Builder设计模式
- Java设计模式—Builder
- c++设计模式—Builder
- Builder模式——设计模式学习
- Android设计模式——Builder模式
- Java设计模式——Builder模式
- Android设计模式——Builder模式
- Android设计模式——Builder模式
- 设计模式——Builder模式
- Android设计模式——Builder模式
- 设计模式——Builder模式
- 设计模式——Builder模式
- 【设计模式】—— 创建者模式Builder
- java设计模式——Builder模式
- 设计模式——Builder 模式
- JAVA设计模式 — 生成器模式(Builder)
- 设计模式 — 生成器模式 (Builder)
- ARQ与滑动窗口协议
- [Practical.Vim(2012.9)].Drew.Neil.Tip20学习摘要
- 欧冠落幕
- “,”附近有语法错误,dbutils关键字错误
- android中如何解析没有Key的Json数据
- 《设计模式》第三章——Builder模式
- 将本地git仓库推送到github上
- 用Bash Script编写Hadoop MapReduce Streaming
- 浅析深究什么是SOA?
- 2015欧冠决赛--脑力劳动结硕果
- Spark的安装
- JDK自带工具jps,jstat,jmap,jconsole使用
- 全排列算法
- Java命令行