您的位置:首页 > 编程语言 > Java开发

Java 设计模式之建造者模式的详解(创建模式)

2016-07-30 18:16 363 查看
建造模式(Builder)是对象的创建模式,建造模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是建造过程生成具有不同内部表象的产品对象。一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,通常我们称作内部表象,不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有那些零件,每个产品对应的零件彼此有何不同,是怎么建造出来的,以及怎样组成产品的。

建造模式的简略图如下图所示:



建造模式的角色:

抽象建造者(Builder)角色:给出一个抽象接口,用来规范产品对象各个组成成分的建造,跟商业逻辑无关,但是一般而言,有多少方法产品就有几部分组成。

具体建造者(Concrete Builder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例包括创建产品各个零件和产品本身。

导演者(Director)角色:担任这个角色的类调用具体建造者角色创建产品对象。导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识是具体建造者。

产品(Product)角色:产品便是建造中的复杂对象,一般来说产品对象有多个部分组成,在一个体统中会有多余一个的产品类。

实例:

我们还举车的例子,现在要生产一辆客车,客车包括各个部分,如轮胎,底盘,发动机,座椅,外壳。建立以下模型:



上面的模型代码表示如下:

1.导演者:

//导演者
public class Director {

private Builder builder;

public TrafficMachine construct() {
builder = new CoachBuilder();
builder.buildTire();// 创建轮胎
builder.buildChassis();// 创建底盘
builder.buildEngine();// 创建发动机
builder.buildSeat();// 创建座椅
builder.buildShell();// 创建外壳
return builder.retrieveResult();
}
}
2.抽象建造者

//抽象建造者
public interface Builder {

public void buildTire();   //建造轮胎
public void buildChassis(); //建造底盘
public void buildEngine();//建造引擎
public void buildSeat(); //建造轮椅
public void buildShell();//建造外壳
public TrafficMachine retrieveResult();   //返回产品

}
3.实现建造者

//实现建造者
public class CoachBuilder implements Builder{

@Override
public void buildTire() {
// TODO Auto-generated method stub

}

@Override
public void buildChassis() {
// TODO Auto-generated method stub

}

@Override
public void buildEngine() {
// TODO Auto-generated method stub

}

@Override
public void buildSeat() {
// TODO Auto-generated method stub

}

@Override
public void buildShell() {
// TODO Auto-generated method stub

}

@Override
public TrafficMachine retrieveResult() {
// TODO Auto-generated method stub
return null;
}

}
4.产品接口--可以没有

//产品接口(可以没有)
public interface TrafficMachine {
//抽象的车
}
5.实现产品类

//客车类—实现产品类
public class Coach implements TrafficMachine {

private Chassis chassis;
private Tire tire;
private Engine engine;
private Seat seat;
private Shell shell;

public Chassis getChassis() {
return chassis;
}

public void setChassis(Chassis chassis) {
this.chassis = chassis;
}

public Tire getTire() {
return tire;
}

public void setTire(Tire tire) {
this.tire = tire;
}

public Engine getEngine() {
return engine;
}

public void setEngine(Engine engine) {
this.engine = engine;
}

public Seat getSeat() {
return seat;
}

public void setSeat(Seat seat) {
this.seat = seat;
}

public Shell getShell() {
return shell;
}

public void setShell(Shell shell) {
this.shell = shell;
}

}
6.部件类

public class Seat {

}
public class Engine {

}
.........

通过上面例子我们可以更明确创建模式的各个角色职能和作用,在现实开发中可能会省略一些,要根据实际业务来决定,以上是一个产品的例子,事实上多个产品的更为常见。我们将上面的模型扩展,加入多产品,模型如下:



多产品的实现和单一产品的实现基本一样,这里就不赘述了。当产品为多产品的时候整体结构有点像抽象工厂模式,但是我们只要把握重点,抽象工厂是在客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象;而建造模式重点在于影藏和封装复杂产品的内部建造过程和结构,侧重点和用意完全不同,这点要掌握了区分就很简单了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息