第十三篇:建造者模式

见名之意,建造者就是用来建造对象的嘛!不过...等等,我们先前不是有工厂模式吗?我记得工厂模式也是用来创建对象的阿? 别着急,听我说!

我们得将这两种模式区分一下,工厂模式是用来创建一个对象,它只初始化对象必须具备的属性,而建造者模式呢,是在创建完对象的基础上,再对对象进行一系列操作从而拿到更加完善的对象!  就比如造房子,工厂模式就像是提供一个地基,而通过建造者模式,我们可以在有地基的基础上,再进行砌砖,打梁,盖瓦...等等操作最终得到一个房子!


现在我们试想一下,如果需要你来组装一台电脑,你需要先插好主板,再装上CPU,然后是显卡,电源,内存...等等,然而,你可能犯迷糊了,忘记装上内存...那你的电脑可就无法正常运行了!当不同的人去组装电脑时,都有可能忘记做某事而导致电脑无法正常开机, 这在我们程序里面表示的就是,构建某一个对象,然而忘记了某个步骤,导致最终形成的对象与期待不相匹配! 就比如构建一个游戏人物,然而忘记绘制双手...这就很尴尬了!


所以,我们需要某种方式,通过这种方式可以标准化的构建某个对象,那么这种构建对象的方式,就称为建造者模式!

OK,这个模式很简答, 就不多说了,直接让代码撸起来!

//抽象电脑类,这些步骤也是有顺序的,不能让客户端瞎搞
//总不能主板好没装就插内存条吧?往哪插?
abstract class AbstractComputer{
	abstract void addMainBoard();//安装主板
	abstract void addCPU();//安装CPU
	abstract void addGraphics();//安装显卡
	abstract void addPower();//安装电源
	abstract void addMemory();//安装内存条
	abstract void joints();//将各部件的插线连接好
}

//一台联想电脑
class ThinkComputer extends AbstractComputer{
	@Override
	void addMainBoard() {
		System.out.println("安装好联想牌主板");
	}
	@Override
	void addCPU() {
		System.out.println("安装好联想牌CPU");
	}
	@Override
	void addGraphics() {
		System.out.println("安装好联想牌显卡");
	}

	@Override
	void addPower() {
		System.out.println("安装好联想牌电源");
	}
	@Override
	void addMemory() {
		System.out.println("安装好联想牌内存");
	}
	@Override
	void joints() {
		System.out.println("将联想牌电脑插线全部插好");
	}
}
//一台华硕电脑
class AsusComputer extends AbstractComputer{
	@Override
	void addMainBoard() {
		System.out.println("安装好华硕牌主板");
	}
	@Override
	void addCPU() {
		System.out.println("安装好华硕牌CPU");
	}
	@Override
	void addGraphics() {
		System.out.println("安装好华硕牌显卡");
	}

	@Override
	void addPower() {
		System.out.println("安装好华硕牌电源");
	}
	@Override
	void addMemory() {
		System.out.println("安装好华硕牌内存");
	}
	@Override
	void 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值