您的位置:首页 > 产品设计 > UI/UE

设计模式学习—建造者模式

2014-01-12 21:44 253 查看
动机:构建与表示分离
结构:
     


     3.角色:

抽象建造者
具体建造者
指挥者
产品

     4.用例:javaMail、KFC套餐、游戏中的服装等
     5.优缺点:

优点:
客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦
每一个具体建造者都相对独立,而与其他的具体建造者无关。户使用不同的具体建造者即可得到不同的产品对象
增加新的具体建造者无需修改原有类库的代码,系统扩展方便

缺点:
如果产品之间的差异性很大,不适合使用建造者模式
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大

     6.适用:

需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性
需要生成的产品对象的属性相互依赖,需要指定其生成顺序
对象的创建过程独立于创建该对象的类
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同类型的产品

     7.代码

/**

 * 产品

 *@author ilmlife(ilmlife @126.com)

 * <pre>2013 -12- 16下午11:22:58</pre>

 */

public class Product
{

}

[align=left]/**[/align]
[align=left] * 抽象建造者[/align]
[align=left] *@author ilmlife(ilmlife @126.com)[/align]
[align=left] * <pre>2013 -12- 16下午11:30:50</pre>[/align]
[align=left] */[/align]
public abstract class Builder
{
[align=left]       /**[/align]
[align=left]       * 构造第一部分[/align]
[align=left]       */[/align]
[align=left]       public abstract void buildPart1();[/align]
[align=left]       /**[/align]
[align=left]       * 构造第二部分[/align]
[align=left]       */[/align]
[align=left]       public abstract void buildPart2();[/align]
[align=left]       /**[/align]
[align=left]       * 获取构造结果[/align]
[align=left]       * @return[/align]
[align=left]       */[/align]
       public abstract Product
getResult();
[align=left]}[/align]
[align=left]
[/align]

[align=left]/**[/align]
[align=left] * 具体建造者[/align]
[align=left] *@author ilmlife(ilmlife @126.com)[/align]
[align=left] * <pre>2013 -12- 16下午11:33:24</pre>[/align]
[align=left] */[/align]
public class ConcreteBuilder extends Builder
{
[align=left]       private Product product = new Product();[/align]
[align=left]       @Override[/align]
       public void buildPart1()
{
             // TODO Auto-generated
method stub
[align=left]      }[/align]
[align=left]
[/align]
[align=left]       @Override[/align]
       public void buildPart2()
{
             // TODO Auto-generated
method stub
[align=left]      }[/align]
[align=left]
[/align]
[align=left]       @Override[/align]
       public Product
getResult() {
[align=left]             return product ;[/align]
[align=left]      }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]

[align=left]/**[/align]
[align=left] * 指挥者[/align]
[align=left] *@author ilmlife(ilmlife @126.com)[/align]
[align=left] * <pre>2013 -12- 16下午11:34:35</pre>[/align]
[align=left] */[/align]
public class Director
{
[align=left]       private Builder builder ;[/align]
[align=left]       public void construct(){[/align]
[align=left]             builder = new ConcreteBuilder();[/align]
[align=left]             builder.buildPart1();[/align]
[align=left]             builder.buildPart2();[/align]
[align=left]             builder.getResult();[/align]
[align=left]      }[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息