构造者模式

四. 构造者模式
整理自 《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();

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值