设计模式-建造者模式

建造者模式详解

建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示

我们可能会需要创建不同的对象,但这些对象的**创建步骤都是一样的,只是每一步的具体细节不同。**这个时候我们就可以使用建造者模式来进行设计。

我们生活中也经常碰到建造者模式,比如肯德基的汉堡,虽然种类很多,但是制作的步骤基本都是一致的,只是具体的细节不同。这样就不会出现由于疏忽而导致缺少某些必要环节。这也是标准化生产的好处之一。

建造者模式是在当创建复杂对象的算法应当独立于该对象组成部分以及它们的装配方式时适用的模式。它主要用于创建一些复杂对象,内部构造顺序是稳定的,但具体的构造却有复杂的变化。

下面我们来写demo,是一个画小人的程序。
首先我们需要一个抽象类Person,它规定了画小人需要哪些步骤

public abstract class Person {
	public abstract void drawHead();
	public abstract void drawBody();
	public abstract void drawLeftHand();
	public abstract void drawRightHand();
	public abstract void drawLeftLeg();
	public abstract void drawRightLeg();
}

然后我们需要两个具体的实现类,一个胖小人和一个瘦小人

public class FatPerson extends Person{
	@Override
	public void drawHead(){
		System.out.println("画一个胖脸");
	}
	@Override
	public void drawBody(){
		System.out.println("画一个大肚子");
	}
	@Override
	public void drawLeftHand(){
		System.out.println("画一个左手");
	}
	@Override
	public void drawRightHand(){
		System.out.println("画一个右手");
	}
	@Override
	public void drawLeftLeg(){
		System.out.println("画一个粗左腿");
	}
	@Override
	public void drawRightLeg(){
		System.out.println("画一个粗右腿");
	}
}

public class ThinPerson extends Person{
	@Override
	public void drawHead(){
		System.out.println("画一个瘦脸");
	}
	@Override
	public void drawBody(){
		System.out.println("画一个小肚子");
	}
	@Override
	public void drawLeftHand(){
		System.out.println("画一个左手");
	}
	@Override
	public void drawRightHand(){
		System.out.println("画一个右手");
	}
	@Override
	public void drawLeftLeg(){
		System.out.println("画一个细左腿");
	}
	@Override
	public void drawRightLeg(){
		System.out.println("画一个细右腿");
	}
}

接着我们还需要一个指挥者类,这个类用来控制创建过程,也用它来隔离用户与创建过程的关系

public class PersonDirector{
	private Person person;
	
	private PersonDirector(Person person){
		this.person = person;
	}
	
	public void createPerson(){
		person.drawHead();
		person.drawBody();
		person.drawLeftHand();
		person.drawRightHand();
		person.drawLeftLeg();
		person.drawRightLeg();
	}
}

这样,客户端在调用时,就可以这样去做

PersonDirector pd = new PersonDirector(new FatPerson());
pd.createPerson();

相关demo可以参考我的gitee仓库
https://gitee.com/akitsuki-kouzou/DesignPatternDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值