简单理解常用设计模式(九)建造者模式(例如通过第三者生成人物)

这里记录一个比较常用的模式,建造者模式,主要是应用于:当创建复杂对象的算法应该独立于该对象的组成部分,以及它们的装配方式时适用。

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

这里应用原书的场景,调用方生成一个人物形象,不应该让调用方来决定每个细节,比如胖身体,大头等,应该给调用方提供一个整体方案如胖子人物,瘦子人物。

原书UML如下:


调用类如下:

package com.gcc.builderModel;
/**
 * 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。
 * 使用户不必知道建造细节,只需指定建造结果。
 * 实现接口,同时防止建造细节的遗漏
 *
 */
public class TestBuilder {

	public static void main(String[] args) {
		PersionBuilder pa = new PersionA();
		PersionBuilder pb = new PersionB();
		new DirectPersion(pa).createPersion();
		new DirectPersion(pb).createPersion();
	}
	
}

接口如下:

package com.gcc.builderModel;

public interface PersionBuilder {

	void head();
	void body();
	void leftHand();
	void rightHand();
	void leftFoot();
	void rightFoot();
	
}

人物A如下:

package com.gcc.builderModel;

public class PersionA implements PersionBuilder {

	@Override
	public void head() {
		System.out.print("大头");
	}

	@Override
	public void body() {
		System.out.print("胖身体");
	}

	@Override
	public void leftHand() {
		System.out.print("胖左手");
	}

	@Override
	public void rightHand() {
		System.out.print("胖右手");
	}

	@Override
	public void leftFoot() {
		System.out.print("胖左脚");
	}

	@Override
	public void rightFoot() {
		System.out.println("胖右脚");
	}

}

人物B如下:

package com.gcc.builderModel;

public class PersionB implements PersionBuilder {

	@Override
	public void head() {
		System.out.print("小头");
	}

	@Override
	public void body() {
		System.out.print("瘦身体");
	}

	@Override
	public void leftHand() {
		System.out.print("瘦左手");
	}

	@Override
	public void rightHand() {
		System.out.print("瘦右手");
	}

	@Override
	public void leftFoot() {
		System.out.print("瘦左脚");
	}

	@Override
	public void rightFoot() {
		System.out.print("瘦右脚");
	}

}

指挥者类如下:

package com.gcc.builderModel;

/**
 * 指挥者,用来隔离用户和具体的实现过程
 *
 */
public class DirectPersion {

	PersionBuilder builder;

	public DirectPersion(PersionBuilder builder) {
		this.builder = builder;
	}
	
	public void createPersion(){
		builder.head();
		builder.body();
		builder.leftHand();
		builder.rightHand();
		builder.leftFoot();
		builder.rightFoot();
	}
	
}

咳咳,才发现demo的person拼写错了,大家见谅。

还有对于指挥者类的修改,如果需要添加的功能(方法)是公共的,比如耳朵,眼睛则可以添加,否则就不应该添加。

指挥者(建造者)类隐藏了一个人物(产品)是如何组装的过程,如果要修改组装,修改指挥者类的调用即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值