3 创建型设计模式之建造者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaofather/article/details/85122656

1. 深入理解建造者模式

1.1 建造者模式的理念:高可用,易维护

1.2 命题:根据工人施工流程实现建造者设计模式

工人施工流程图

照着上图分析并总结:

1.设计师构建蓝图

1.定义需求(构造对象)
public class DemandAssumption {
	private String gender;// 性别
	private Integer height;// 身高
	private String face;// 面貌

	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Integer getHeight() {
		return height;
	}
	public void setHeight(Integer height) {
		this.height = height;
	}
	public String getFace() {
		return face;
	}
	public void setFace(String face) {
		this.face = face;
	}
	@Override
	public String toString() {
		return "DemandAssumption [gender=" + gender + ", height=" + height
				+ ", face=" + face + "]";
	}
}

2.工人拿到蓝图准备施工相关内容,因为不同的施工场景不同,细节产生变化,故需要抽象化

2.抽象需求
public interface Demand {
	void gender();
	void height();
	void face();
	DemandAssumption people();
}
3.具体的建造
public class People1 implements Demand{

	private DemandAssumption people;
	
	public People1(){
		people = new DemandAssumption();
	}

	@Override
	public void gender() {
		people.setGender("男");
	}

	@Override
	public void height() {
		people.setHeight(185);
	}

	@Override
	public void face() {
		people.setFace("穷凶极恶");
	}

	@Override
	public DemandAssumption people() {
		people.toString();
		return people;
	}
	
}
public class People2 implements Demand{
	
	private DemandAssumption people;
	
	public People2(){
		people = new DemandAssumption();
	}

	@Override
	public void gender() {
		people.setGender("女");
	}

	@Override
	public void height() {
		people.setHeight(165);
	}

	@Override
	public void face() {
		people.setFace("如沐春风");
	}

	@Override
	public DemandAssumption people() {
		return people;
	}

}

3.工人根据准备的内容定义施工方式

4.建造者
public class Builder {

	public DemandAssumption people(Demand demand){
		demand.gender();
		demand.height();
		demand.face();
		return demand.people();
	}
	
}

4.项目负责人要求工人施工,并得到成果

5.测试类
public class TestMain {

	public static void main(String[] args) {
		Demand de = null;
		Builder builder = new Builder();
		de = new People1();
		System.out.println(builder.people(de).toString());
		de = new People2();
		System.out.println(builder.people(de).toString());
	}
	
}

5.结果

输出:
DemandAssumption [gender=男, height=185, face=穷凶极恶]
DemandAssumption [gender=女, height=165, face=如沐春风]

 

2. 什么时候需要用到建造者模式?

2.1 当你类似于工程项目负责人,你对别人做的事情不放心,需要有一个大纲来控制的时候

2.2 功能版本更迭,但实际内容差不多的时候

版本1的内容是123 , 版本2的内容是124,此时可以用到建造者设计模式,版本之间切换自由选择,而不是建立分支增加功能难度,影响后期维护

猜你喜欢

转载自blog.csdn.net/xiaofather/article/details/85122656
今日推荐