设计模式之 建造者模式

建造者模式就是把复杂的内部创建封装起来,对于外部调用的人来说只用传入建造者和建造工具,就能得到产品来!

举个例子:

邻居王大娘给王大爷一个鱼竿,他晚上给提几条鱼回来!至于老头子是怎么钓上来的,王大娘不用管!


举个创建游戏角色的代码例:

先写一个角色的结构类模型

public class GameRole {

	private int powerValue;
	private int sex;
	private String name;

	public int getPowerValue() {
		return powerValue;
	}
	
	public void setPowerValue(int powerValue) {
		this.powerValue = powerValue;
	}

	public int getSex() {
		return sex;
	}
	
	public void setSex(int sex){
		this.sex = sex;
	}

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}

角色包含名字,战斗力和性别 ,这个相当于王大爷要去钓得的鱼的属性


再写一个建造工具部分的接口

public interface RoleBuilder {
	void buildPowerValue();
	void buildSex();
	void buildName();
	GameRole buildGameRole();
}

这个定义了钓鱼必须要做的几个部分,比如一定要在河边 一定要挂鱼饵 等,河边 鱼饵等等就是实用工具的一个部分

如果要钓鲤鱼必须在某个水域,必须使用某个鱼饵


下面实现RoleBuilder 的接口

我这里是要建造一个武士角色的建造工具

public class WarriorRoleBuilder implements RoleBuilder {
	GameRole mGameRole;

	public WarriorRoleBuilder() {
		mGameRole = new GameRole();
	}

	@Override
	public void buildPowerValue() {
		// TODO Auto-generated method stub
		mGameRole.setPowerValue(10000);
	}

	@Override
	public void buildSex() {
		// TODO Auto-generated method stub
		mGameRole.setSex(1);
	}

	@Override
	public void buildName() {
		// TODO Auto-generated method stub
		mGameRole.setName("夕阳武士");
	}

	@Override
	public GameRole buildGameRole() {
		// TODO Auto-generated method stub
		return mGameRole;
	}
}

这一个很重要,武士,法师,弓箭手所有的属性都一样,只是属性值有不同,所以在建造工具不一样


下面就是构建过程了

public class RoleDirector {
	public GameRole constructGameRole(RoleBuilder rb) {

		rb.buildSex();
		rb.buildPowerValue();
		rb.buildName();
		
		return rb.buildGameRole();
	}
}

RoleBuilder 构建过程一步步执行,最后返回一个产品的对象!


测试代码:

public static void main(String[] args) {
		RoleDirector rd = new RoleDirector();
		GameRole mGameRole = rd.constructGameRole(new WarriorRoleBuilder());
	}


用户在用的时候,只用到建造者( RoleDirector )和 建造工具( WarriorRoleBuilder

便拿到一个武士属性的角色(mGameRole 


这个跟工厂模式有点像,但完全不一样!

如果是工厂模式的话:

会写一个武士的类,魔法师的类,弓箭手的类,去继承GameRole ,然后在工厂里面会根据不同的传入属性获得不同的角色!


而这个建造者模式,更看重建造工具:

把建造工具抽象出来,根据角色的不同属性,写不同的建造工具类,最后在构造的时候,填入工具就得到所有的角色。


据说JavaMail用的就是建造者模式,没看过代码不敢肯定!













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值