大话设计模式之建造者模式(生成器模式) 建造队与指挥者的纠缠

建造者模式,相信很多人都听说过,或者使用过,也叫做生成器模式。例如我们都知道人由头部、身体、双手和双脚组成,我们使用建造者模式来实现一下这个功能。

第一步:创建一个人对象类,有四个属性,分别代表头部、手、脚、身体,同时也有一个行为,就是显示自己。

public class Person {
	
	private String head;
	private String boby;
	private String hand;
	private String foot;
	
	public void show() {
		System.out.println(this.head + "," + this.boby + "," + this.hand + "," + this.foot);
	}
	
	public String getHead() {
		return head;
	}
	public void setHead(String head) {
		this.head = head;
	}
	public String getBoby() {
		return boby;
	}
	public void setBoby(String boby) {
		this.boby = boby;
	}
	public String getHand() {
		return hand;
	}
	public void setHand(String hand) {
		this.hand = hand;
	}
	public String getFoot() {
		return foot;
	}
	public void setFoot(String foot) {
		this.foot = foot;
	}
}
第二步:抽象一个人的建造类,建造步骤有四个,分别为建造头部、建造双手、建造双脚和建造身体,具体的实现由子类来实现,最后有一个提供成品的方法,抽象类约束了子类的行为,子类必须实现这个五个方法,避免了子类遗漏某个建造步骤的可能性。

//建造一个人对象
public abstract class PersonBuilder {
	
	public abstract void head();
	public abstract void boby();
	public abstract void hand();
	public abstract void foot();
	public abstract Person getPerson();
}
第三步:创建一个瘦人建造队和一个胖人建造队飞,分别创建瘦人和胖子。
//建造瘦人
public class ThinPersonBuilder extends PersonBuilder {

	private Person thinPerson = new Person();
	
	@Override
	public void boby() {
		thinPerson.setBoby("偏瘦性身体");
	}

	@Override
	public void foot() {
		thinPerson.setFoot("双脚");
	}

	@Override
	public void hand() {
		thinPerson.setHand("双手");
	}

	@Override
	public void head() {
		thinPerson.setHead("头");
	}

	@Override
	public Person getPerson() {
		return thinPerson;
	}

}
//建造胖人
public class FatPersonBuilder extends PersonBuilder {

private Person thinPerson = new Person();
	
	@Override
	public void boby() {
		thinPerson.setBoby("偏胖性身体");
	}

	@Override
	public void foot() {
		thinPerson.setFoot("双脚");
	}

	@Override
	public void hand() {
		thinPerson.setHand("双手");
	}

	@Override
	public void head() {
		thinPerson.setHead("头");
	}

	@Override
	public Person getPerson() {
		return thinPerson;
	}

}
第四步:我们都知道建造队都有指挥者,那么我们就创建一个指挥者类,指挥建造队如何建造,指挥者负责指挥建造对进行工作。
//指挥者
public class Director {
	
	//创建一个人对象,具体是瘦人还是胖人由参数决定
	public void buildPerson(PersonBuilder personBuilder) {
		//指挥建造过程
		personBuilder.head();
		personBuilder.boby();
		personBuilder.hand();
		personBuilder.foot();
	}
}
第五步:我们来测试一下。我们首先创建一个指挥者,接着创建一个瘦人建造队,然后让指挥者指挥建造队进行建造人,最后向建造队取得建造完成的成品,即我们需要的人对象,然后显示一下。
//测试类
public class Test {
	
	public static void main(String[] args) {
		Director director = new Director(); //指挥者
		
		ThinPersonBuilder thinPersonBuilder = new ThinPersonBuilder();
		director.buildPerson(thinPersonBuilder); //指挥瘦人建造队
		Person thinPerson = thinPersonBuilder.getPerson(); //瘦人建造
		thinPerson.show();
		
		FatPersonBuilder fatPersonBuilder = new FatPersonBuilder();
		director.buildPerson(fatPersonBuilder);//指挥胖人建造队 
		Person fatPerson = fatPersonBuilder.getPerson(); //胖人建造
		fatPerson.show();
		
	}
}
总结:建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。从而可以使得可拓展,可维护。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值