四. 构造者模式
整理自 《java与模式》阎宏编著
1.意图:
将一个复杂产品对象的构建与它的表示分离,产品的结构和创建过程对客户端保持透明,允许同样的构建过程创建不同的对象表示。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10043/01a0a97d-f0cb-3a35-85c3-9be5f39efead.jpg[/img]
3.原理:
构造者模式将产品的结构和产品的建造过程对客户端隐藏起来,把对构造过程进行指挥的责任和具体构造零件的责任分割开来,达到责任划分和封装的目的。
4.特征:
a.抽象构造者对象定义一些接口,规范产品对象各个组成部分的构造。这些接口独立应用程序的具体逻辑。
b.具体构造者实现抽象构造者定义的接口,给出具体的创建产品实例的操作,构造完成后提供产品的实例。
c.导演者直接与客户端打交道,将客户端创建产品的请求划分为对各个部件的构造请求,再将这些请求委派给具体构造者。
5.说明:
几种特殊情况:
a.如果系统只有一个具体构造者,可以省略抽象构造者角色。
b.在系统只有一个具体构造者情况下,可以同进省略抽象构造者和导演者角色,由具体构造者承担这两种角色。
6.使用案例:
7.代码:
// Builder.java 抽象构造者
public interface Builder
{
/**
* Construct part of the complex Product
*/
void buildPart1();
void buildPart2();
/**
* @return constructed Product
*/
Product getResult();
}
// ConcreteBuilder.java 具体构造者
public class ConcreteBuilder implements Builder
{
/**
* Reference to Product being constructed
*/
private ConcreteBuilderProduct resultProduct;
public Product getResult()
{
return resultProduct;
}
public void buildPart1()
{
// provide implementation here
}
public void buildPart2()
{
// TODO Auto-generated method stub
}
}
// Director.java 导演者角色
/**
* Manages Product creation using Builder
*/
public class Director
{
/**
* Reference to Builder currently used
*/
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void construct()
{
// somehow manage construction performed with builder
builder.buildPart1();
builder.buildPart2();
}
}
//客户端
public class Client
{
/**
* Sample usage of Builder
*/
public void sampleOperation()
{
ConcreteBuilder builder = new ConcreteBuilder();
new Director(builder).construct();
Product product = builder.getResult();
}
}
//具体构造者承担起抽象构造者和导演者角色的代码
public class ConcreteBuilder
{
/**
* Reference to Product being constructed
*/
private ConcreteBuilderProduct resultProduct;
public Product getResult()
{
return resultProduct;
}
public void buildPart1()
{
}
public void buildPart2()
{
}
public void construct()
{
buildPart1();
buildPart2();
}
}
整理自 《java与模式》阎宏编著
1.意图:
将一个复杂产品对象的构建与它的表示分离,产品的结构和创建过程对客户端保持透明,允许同样的构建过程创建不同的对象表示。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10043/01a0a97d-f0cb-3a35-85c3-9be5f39efead.jpg[/img]
3.原理:
构造者模式将产品的结构和产品的建造过程对客户端隐藏起来,把对构造过程进行指挥的责任和具体构造零件的责任分割开来,达到责任划分和封装的目的。
4.特征:
a.抽象构造者对象定义一些接口,规范产品对象各个组成部分的构造。这些接口独立应用程序的具体逻辑。
b.具体构造者实现抽象构造者定义的接口,给出具体的创建产品实例的操作,构造完成后提供产品的实例。
c.导演者直接与客户端打交道,将客户端创建产品的请求划分为对各个部件的构造请求,再将这些请求委派给具体构造者。
5.说明:
几种特殊情况:
a.如果系统只有一个具体构造者,可以省略抽象构造者角色。
b.在系统只有一个具体构造者情况下,可以同进省略抽象构造者和导演者角色,由具体构造者承担这两种角色。
6.使用案例:
7.代码:
// Builder.java 抽象构造者
public interface Builder
{
/**
* Construct part of the complex Product
*/
void buildPart1();
void buildPart2();
/**
* @return constructed Product
*/
Product getResult();
}
// ConcreteBuilder.java 具体构造者
public class ConcreteBuilder implements Builder
{
/**
* Reference to Product being constructed
*/
private ConcreteBuilderProduct resultProduct;
public Product getResult()
{
return resultProduct;
}
public void buildPart1()
{
// provide implementation here
}
public void buildPart2()
{
// TODO Auto-generated method stub
}
}
// Director.java 导演者角色
/**
* Manages Product creation using Builder
*/
public class Director
{
/**
* Reference to Builder currently used
*/
private Builder builder;
public Director(Builder builder)
{
this.builder = builder;
}
public void construct()
{
// somehow manage construction performed with builder
builder.buildPart1();
builder.buildPart2();
}
}
//客户端
public class Client
{
/**
* Sample usage of Builder
*/
public void sampleOperation()
{
ConcreteBuilder builder = new ConcreteBuilder();
new Director(builder).construct();
Product product = builder.getResult();
}
}
//具体构造者承担起抽象构造者和导演者角色的代码
public class ConcreteBuilder
{
/**
* Reference to Product being constructed
*/
private ConcreteBuilderProduct resultProduct;
public Product getResult()
{
return resultProduct;
}
public void buildPart1()
{
}
public void buildPart2()
{
}
public void construct()
{
buildPart1();
buildPart2();
}
}