建造者模式(Builder Pattern):将一个复杂对象(产品)的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。也被称为生成器模式。
建造者模式是复杂对象的组装和创建,是一种对象创建型模式,满足依赖倒转原则(细节依赖于抽象,而非抽象依赖于细节)。
假设一个复杂的对象可以看做是一个产品的话,那么该对象的方法(或称内部表象)就对应了产品的零件,通过建造者模式,客户不需要知道建造的具体细节,只需要指定需要建造的类型就可以得到对应的产品。
建造者模式主要包含四个角色:
UML关系图如下:
代码如下:
Builder.java
/**
* 抽象建造者
* @author sywyg
* @since 2015.8.27
*
*/
public interface Builder {
void BuildProduct();
void addPartA(String name);
void addPartB(String name);
void addPartC(String name);
Product getResult();
}
ConcreteBuilder.java
/**
* 具体建造者
* @author sywyg
* @since 2015.8.27
*
*/
public class ConcreteBuilder implements Builder {
private Product product;
@Override
public void BuildProduct() {
product = new Product();
}
@Override
public void addPartA(String name) {
A a = new A(name);
product.setA(a);
System.out.println("添加部件A成功");
}
@Override
public void addPartB(String name) {
B b = new B(name);
product.setB(b);
System.out.println("添加部件B成功");
}
@Override
public void addPartC(String name) {
C c = new C(name);
product.setC(c);
System.out.println("添加部件C成功");
}
@Override
public Product getResult() {
return product;
}
}
Director.java
/**
* 指挥者,指挥产品的生产过程
* @author sywyg
* @since 2015.8.27
*
*/
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public Product construct(){
builder.BuildProduct();
builder.addPartA("部件A");
builder.addPartC("部件C");
builder.addPartB("部件B");
return builder.getResult();
}
}
Product.java
/**
* 产品类:由三个部件够成
* @author sywyg
* @since 2015.8.27
*
*/
public class Product {
private A a;
private B b;
private C c;
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public C getC() {
return c;
}
public void setC(C c) {
this.c = c;
}
}
class A{
private String name;
public A(String name){
this.name = name;
}
}
class B{
private String name;
public B(String name){
this.name = name;
}
}
class C{
private String name;
public C(String name){
this.name = name;
}
}
对上面进行测试,代码如下:
public class Client {
public static void main(String[] args) {
// 首先创建具体建造者
Builder builder = new ConcreteBuilder();
// 根据具体建造者创建导演类
Director director = new Director(builder);
// 直接调用导演类的建造方法创建产品
Product product = director.construct();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wangyongge85/article/details/48135641