设计模式 —— 建造者模式

建造者模式

建造者模式是一步一步创建一个复杂对象的创建型模式,它允许使用者在不知道内部建造细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,是的构建过程和不见得表示隔离开来。

二,建造者模式的定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

三,建造者模式的使用场景

(1)相同的方法,不同的执行顺序,产生不同的事件结果。

(2)对各部件或零件,都可以配到一个对象中,但是产生的运行结果又不相同时。

(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的结果,这个时候使用创建者模式非常合适。

(4)当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时。

四,建造者模式的UML类图
在这里插入图片描述

实例1:设计小人的加工过程的程序
源代码:
方法一:用户在客户端实现加工,出错率高,且操作复杂,加工类型少

package org.yunan.design;

public class bulider1 {
	public static void main(String[] args) {
		
		bulidman man= new Man();//小人
		man.buildtype();
		man.buildHead();
		man.buildLeftfoot();
		man.buildLefthand();
		man.buildRightfoot();
		man.buildRighthand();
	
	}
}
interface bulidman{
	public abstract void buildtype();//类型
	public abstract void buildHead();//头
	public abstract void buildTorso();//躯干
	public abstract void buildLeftfoot();//左脚;
	public abstract void buildLefthand();//左手
	public abstract void buildRightfoot();//右脚;
	public abstract void buildRighthand();//右手;
}
class  Man implements bulidman{

	@Override
	public void buildtype() {
		// TODO Auto-generated method stub
		System.out.println("小人");
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		System.out.println("头");
	}

	@Override
	public void buildTorso() {
		// TODO Auto-generated method stub
		System.out.println("躯干");
	}

	@Override
	public void buildLeftfoot() {
		// TODO Auto-generated method stub
		System.out.println("左脚");
	}

	@Override
	public void buildLefthand() {
		// TODO Auto-generated method stub
		System.out.println("左手");
	}

	@Override
	public void buildRightfoot() {
		// TODO Auto-generated method stub
		System.out.println("右脚");
	}

	@Override
	public void buildRighthand() {
		// TODO Auto-generated method stub
		System.out.println("右手");
	}
		
}

方法二:无控制者,加工顺序无法保证

package org.yunan.design;

public class bulider0 {
	public static void main(String[] args) {
		
		bulidman thin= new thinperson();//小瘦子	
		thin.buildperson();//开始建造
		bulidman fat=new fatperson();//小胖子
		fat.buildperson();//开始建造
		
	}
}
interface bulidman{
	public abstract void buildtype();//类型
	public abstract void buildperson();
	public abstract void buildHead();//头
	public abstract void buildTorso();//躯干
	public abstract void buildLeftfoot();//左脚;
	public abstract void buildLefthand();//左手
	public abstract void buildRightfoot();//右脚;
	public abstract void buildRighthand();//右手;
}
class  thinperson implements bulidman{

	@Override
	public void buildtype() {
		// TODO Auto-generated method stub
		System.out.println("瘦小人");
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		System.out.println("头");
	}

	@Override
	public void buildTorso() {
		// TODO Auto-generated method stub
		System.out.println("躯干");
	}

	@Override
	public void buildLeftfoot() {
		// TODO Auto-generated method stub
		System.out.println("左脚");
	}

	@Override
	public void buildLefthand() {
		// TODO Auto-generated method stub
		System.out.println("左手");
	}

	@Override
	public void buildRightfoot() {
		// TODO Auto-generated method stub
		System.out.println("右脚");
	}

	@Override
	public void buildRighthand() {
		// TODO Auto-generated method stub
		System.out.println("右手");
	}
	public void buildperson() {//设定严格的执行步骤
		this.buildtype();//类型;
		this.buildHead();//头;
		this.buildTorso();//躯干;
		this.buildLeftfoot();//左脚;
		this.buildLefthand();//左手;
		this.buildRightfoot();//右脚;
		this.buildRighthand();//右手;
	}
	
	
}
class  fatperson implements bulidman{

	@Override
	public void buildtype() {
		// TODO Auto-generated method stub
		System.out.println("胖小人");
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		System.out.println("头");
	}

	@Override
	public void buildTorso() {
		// TODO Auto-generated method stub
		System.out.println("躯干");
	}

	@Override
	public void buildLeftfoot() {
		// TODO Auto-generated method stub
		System.out.println("左脚");
	}

	@Override
	public void buildLefthand() {
		// TODO Auto-generated method stub
		System.out.println("左手");
	}

	@Override
	public void buildRightfoot() {
		// TODO Auto-generated method stub
		System.out.println("右脚");
	}

	@Override
	public void buildRighthand() {
		// TODO Auto-generated method stub
		System.out.println("右手");
	}
	public void buildperson() {//设定严格的执行步骤
		this.buildtype();//类型;
		this.buildHead();//头;
		this.buildTorso();//躯干;
		this.buildLeftfoot();//左脚;
		this.buildLefthand();//左手;
		this.buildRightfoot();//右脚;
		this.buildRighthand();//右手;
	}
	
}

方法三:建造者模式,有控制者严格监控加工过程,加工对象

package org.yunan.design;

public class bulider {//客户端
	public static void main(String[] args) {
		Commander1 commander=new Commander1();//指挥者
		bulidman thin=new thinperson();//小瘦子
		commander.creatperson(thin);//创建对象
		commander.buildperson();//开始建造
		bulidman fat=new fatperson();//小胖子
		commander.creatperson(fat);//创建对象
		commander.buildperson();//开始建造
		
	}
}
interface bulidman{
	public abstract void buildtype();//类型
	public abstract void buildHead();//头
	public abstract void buildTorso();//躯干
	public abstract void buildLeftfoot();//左脚;
	public abstract void buildLefthand();//左手
	public abstract void buildRightfoot();//右脚;
	public abstract void buildRighthand();//右手;
}
class  thinperson implements bulidman{

	@Override
	public void buildtype() {
		// TODO Auto-generated method stub
		System.out.println("瘦小人");
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		System.out.println("头");
	}

	@Override
	public void buildTorso() {
		// TODO Auto-generated method stub
		System.out.println("躯干");
	}

	@Override
	public void buildLeftfoot() {
		// TODO Auto-generated method stub
		System.out.println("左脚");
	}

	@Override
	public void buildLefthand() {
		// TODO Auto-generated method stub
		System.out.println("左手");
	}

	@Override
	public void buildRightfoot() {
		// TODO Auto-generated method stub
		System.out.println("右脚");
	}

	@Override
	public void buildRighthand() {
		// TODO Auto-generated method stub
		System.out.println("右手");
	}
	
}
class  fatperson implements bulidman{

	@Override
	public void buildtype() {
		// TODO Auto-generated method stub
		System.out.println("胖小人");
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		System.out.println("头");
	}

	@Override
	public void buildTorso() {
		// TODO Auto-generated method stub
		System.out.println("躯干");
	}

	@Override
	public void buildLeftfoot() {
		// TODO Auto-generated method stub
		System.out.println("左脚");
	}

	@Override
	public void buildLefthand() {
		// TODO Auto-generated method stub
		System.out.println("左手");
	}

	@Override
	public void buildRightfoot() {
		// TODO Auto-generated method stub
		System.out.println("右脚");
	}

	@Override
	public void buildRighthand() {
		// TODO Auto-generated method stub
		System.out.println("右手");
	}
	
}
class Commander1{//指挥者类
	private  bulidman build;
	public void creatperson(bulidman build) {//创建建造对象
		this.build = build;
	}
	public void buildperson() {//设定严格的执行步骤
		this.build.buildtype();//类型;
		this.build.buildHead();//头;
		this.build.buildTorso();//躯干;
		this.build.buildLeftfoot();//左脚;
		this.build.buildLefthand();//左手;
		this.build.buildRightfoot();//右脚;
		this.build.buildRighthand();//右手;
	}
}

优点:
(1)建造者独立,易扩展
(2)便于控制细节风险。

缺点
(1)产品必须有共同点,范围有限制
(2)如内部变化复杂,会有很多的建造类。

以上部分摘取自朱红梅老师2020年5月的课件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yu_Nan___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值