设计模式之建造者模式

原创
2017/05/09 21:53
阅读数 67

建造者模式的主要涉及到的角色有:

输入图片说明

产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

下面我们通过代码来简单的实现一个建造者模式:

产品基类:

public class Person {

	private String head;
	private String body;
	private String foot;
	public String getHead() {
		return head;
	}
	public void setHead(String head) {
		this.head = head;
	}
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getFoot() {
		return foot;
	}
	public void setFoot(String foot) {
		this.foot = foot;
	}
}

产品子类:

public class Man extends Person{

	public Man(){
		System.out.println("开始构建男人");
	}
}

抽象建造者:

public abstract class Builder {

	public abstract void buildHead();
	public abstract void buildBody();
	public abstract void buildFoot();
	
	public abstract Person getPerson();
}

具体建造者:

public class ManBuilder extends Builder{

	private Person person;
	
	public ManBuilder() {
		person = new Man();
	}
	@Override
	public void buildHead() {
		System.out.println("开始构建男人的头");
		person.setHead("男人的头");
	}
	
	@Override
	public void buildBody() {
		System.out.println("开始构建男人的身体");
		person.setBody("男人的身体");
	}

	@Override
	public void buildFoot() {
		System.out.println("开始构建男人的脚");
		person.setFoot("男人的脚");
	}

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

导演类:

public class Director {
	private Builder builder;
	public Director(Builder builder){
		this.builder = builder;
	}
	public Person constructPerson() {  
		builder.buildHead();  
		builder.buildBody();  
		builder.buildFoot();  
        return builder.getPerson();  
   }
}

测试类:

public class Test {

	public static void main(String[] args) {
		ManBuilder manBuilder = new ManBuilder();
		Director director = new Director(manBuilder);
		director.constructPerson();
	}
}

运行结果:

开始构建男人
开始构建男人的头
开始构建男人的身体
开始构建男人的脚

其实简单来说建造者就是用来创建一些比较复杂的对象的,将创建组装的过程进行抽象,例如StringBuilder就是一个建造者模式的体现。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部