设计模式 - 建造者模式

概念:将一个复杂对象的构建与他的表示分离,使得同样的创建过程,可以创建不同的表示。
为什么要这样做:
案例:
“白龙马蹄朝西,伏着唐三藏,跟着三徒弟,西天取经不容易,一行就是几万里”,
此时,我们自己是导演,我们需要自己来给唐三藏配置徒弟。
解决方案:
我的理解:
与工厂模式有什么区别:可以理解为工厂是生产产品,而建造早死创建产品,利用工厂来获得的,肯定是加工过后的产品,而创建者,却是在拿部件组建产品
解耦过程和部件
试用场景:
1.对象的构造过程允许对象有不同的表示。
2.创建复杂对象的算法独立于该对象的组成部位和组成方式。

class Pupil{
	private String species;
	private String weapons;
	private String skill;
	public String getSpecies() {
		return species;
	}
	public void setSpecies(String species) {
		this.species = species;
	}
	public String getWeapons() {
		return weapons;
	}
	public void setWeapons(String weapons) {
		this.weapons = weapons;
	}
	public String getSkill() {
		return skill;
	}
	public void setSkill(String skill) {
		this.skill = skill;
	}
	
}
abstract class PupilBuilder {
	public Pupil pupil;
	//定义徒弟物种
	abstract void builderSpecies();
	//定义徒弟武器
	abstract void builderWeapons();
	//定义徒弟技能
	abstract void builderSkill();
	//允许别人收自己作为徒弟
	public Pupil getResult(){
		builderSpecies();
		builderWeapons();
		builderSkill();
		return this.pupil;
	};
}
class MonkeyKingBuilder extends PupilBuilder{
	@Override
	public void builderSkill() {
		// TODO Auto-generated method stub
		this.pupil.setSkill("72变化");
	}

	@Override
	public void builderSpecies() {
		// TODO Auto-generated method stub
		this.pupil.setSpecies("灵长类动物");
	}

	@Override
	public void builderWeapons() {
		// TODO Auto-generated method stub
		this.pupil.setWeapons("金箍棒");
	}
}

class PigKing extends PupilBuilder{

	@Override
	void builderSkill() {
		// TODO Auto-generated method stub
		this.pupil.setSkill("好迟懒做调节气氛");
	}

	@Override
	void builderSpecies() {
		// TODO Auto-generated method stub
		this.pupil.setSpecies("猪");
	}

	@Override
	void builderWeapons() {
		// TODO Auto-generated method stub
		this.pupil.setWeapons("九齿钉耙");
	}
}

//这里还有沙僧和小白龙,就不一一都写出来了。现在我们开始要将这些徒弟放到剧本中的角色里
class Director{
	public PupilBuilder builder = null;
	public Director(PupilBuilder builder){
		this.builder = builder;
	}
	public Pupil createPupil(){
		return this.builder.getResult();
	}
}
public class XiYouJi{
	public static void main(String args[]){
		PupilBuilder mokey = new MonkeyKingBuilder();
		PupilBuilder pig = new PigKing();
		Director d = new Director(mokey);
		d.createPupil().toString();
		d = new Director(pig);
		d.createPupil().toString();
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值