您的位置:首页 > 其它

设计模式之建造者模式

2017-05-09 00:00 141 查看
摘要: 建造者模式和工厂模式有点类似,都是用来创建对象的,但是工厂模式的核心在于创建对象,而建造者模式的核心在于创建这个对象的过程,注重是如何组装这个对象的。

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



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

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

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

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

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

产品基类:

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就是一个建造者模式的体现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: