第十三篇:建造者模式
来源:互联网 发布:男神执事团类似网络剧 编辑:程序博客网 时间:2024/06/15 20:56
见名之意,建造者就是用来建造对象的嘛!不过...等等,我们先前不是有工厂模式吗?我记得工厂模式也是用来创建对象的阿? 别着急,听我说!
我们得将这两种模式区分一下,工厂模式是用来创建一个对象,它只初始化对象必须具备的属性,而建造者模式呢,是在创建完对象的基础上,再对对象进行一系列操作从而拿到更加完善的对象! 就比如造房子,工厂模式就像是提供一个地基,而通过建造者模式,我们可以在有地基的基础上,再进行砌砖,打梁,盖瓦...等等操作最终得到一个房子!
现在我们试想一下,如果需要你来组装一台电脑,你需要先插好主板,再装上CPU,然后是显卡,电源,内存...等等,然而,你可能犯迷糊了,忘记装上内存...那你的电脑可就无法正常运行了!当不同的人去组装电脑时,都有可能忘记做某事而导致电脑无法正常开机, 这在我们程序里面表示的就是,构建某一个对象,然而忘记了某个步骤,导致最终形成的对象与期待不相匹配! 就比如构建一个游戏人物,然而忘记绘制双手...这就很尴尬了!
所以,我们需要某种方式,通过这种方式可以标准化的构建某个对象,那么这种构建对象的方式,就称为建造者模式!
OK,这个模式很简答, 就不多说了,直接让代码撸起来!
//抽象电脑类,这些步骤也是有顺序的,不能让客户端瞎搞//总不能主板好没装就插内存条吧?往哪插?abstract class AbstractComputer{abstract void addMainBoard();//安装主板abstract void addCPU();//安装CPUabstract void addGraphics();//安装显卡abstract void addPower();//安装电源abstract void addMemory();//安装内存条abstract void joints();//将各部件的插线连接好}
//一台联想电脑class ThinkComputer extends AbstractComputer{@Overridevoid addMainBoard() {System.out.println("安装好联想牌主板");}@Overridevoid addCPU() {System.out.println("安装好联想牌CPU");}@Overridevoid addGraphics() {System.out.println("安装好联想牌显卡");}@Overridevoid addPower() {System.out.println("安装好联想牌电源");}@Overridevoid addMemory() {System.out.println("安装好联想牌内存");}@Overridevoid joints() {System.out.println("将联想牌电脑插线全部插好");}}//一台华硕电脑class AsusComputer extends AbstractComputer{@Overridevoid addMainBoard() {System.out.println("安装好华硕牌主板");}@Overridevoid addCPU() {System.out.println("安装好华硕牌CPU");}@Overridevoid addGraphics() {System.out.println("安装好华硕牌显卡");}@Overridevoid addPower() {System.out.println("安装好华硕牌电源");}@Overridevoid addMemory() {System.out.println("安装好华硕牌内存");}@Overridevoid joints() {System.out.println("将华硕牌电脑插线全部插好");}}
//构建者对象,可以标准化,流程化构建电脑对象,客户端不需要知道一台电脑具体该怎么组装,//只要告知构建者要组装的电脑,它就能正确的对其进行组装!class ComputerBuilder{public AbstractComputer buildComputer(AbstractComputer ac){ac.addMainBoard();ac.addCPU();ac.addGraphics();ac.addPower();ac.addMemory();ac.joints();return ac;}}
public class Test {public static void main(String[] args) {AbstractComputer acThink = new ThinkComputer();AbstractComputer acAsuc = new AsusComputer();ComputerBuilder cb = new ComputerBuilder();//让构建者构建好联想电脑;acThink = cb.buildComputer(acThink);System.out.println("********************************");acAsuc = cb.buildComputer(acAsuc);}}
安装好联想牌主板
安装好联想牌CPU
安装好联想牌显卡
安装好联想牌电源
安装好联想牌内存
将联想牌电脑插线全部插好
********************************
安装好华硕牌主板
安装好华硕牌CPU
安装好华硕牌显卡
安装好华硕牌电源
安装好华硕牌内存
将华硕牌电脑插线全部插好
**********************************************************
是不是很简单啦!
- 第十三篇:建造者模式
- 第十三章--好菜每回味不同-建造者模式(读书笔记)
- 第六篇 设计模式--建造者模式
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- apk签名机制与SHA1算法
- 111 Minimum Depth of Binary Tree
- 无连接表的双向1-n关联,和单项关联
- 1016. 部分A+B (15)--PAT乙级
- JavaScript--5.对象编程DOM
- 第十三篇:建造者模式
- JSTL 标签大全详解
- maven创建webapp时没有src、web.xml等问题
- 使用docker和ubuntu服务器开发在线测试平台
- AVL 树 VS红黑树
- 清空mysql一个库中的所有表的数据
- 线性表的清空与线性表的销毁有什么区别 静态链表与数组的区别
- LeetCode: 33. Search in Rotated Sorted Array
- 收藏一首好诗 《论孩子》纪伯伦(黎巴嫩) 冰心译