第十三篇:建造者模式

来源:互联网 发布:男神执事团类似网络剧 编辑:程序博客网 时间: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
安装好华硕牌显卡
安装好华硕牌电源
安装好华硕牌内存
将华硕牌电脑插线全部插好

**********************************************************

是不是很简单啦!


0 0
原创粉丝点击