1、生成器模式
 生成器模式也称为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
 生成器模式的编程步骤:
 (1)定义一个产品类;
  由于不在该类完成Product类对象的创建,所以无需显示定义构造方法。
 (2)定义n个生成器Build类;
  生成器是用来生成Product对象的,因此一般来说,Product是生成器类的一个成员变量;每创建一个Product对象,本质上先创建Unit1,Unit2,...UnitN,再把它们组合成所需的Product对象,因此需要n个createUnit()方法及一个组合方法composite();由于createUnit()及composite()是共性,因此可定义共同的生成器类接口,n个生成器类均从此接口派生即可。
 (3)定义一个统一调度类,也叫指挥者类。是对生成器接口IBuild的封装。
 生成器设计模式涉及4个关键角色:产品(Product)、抽象生成器(IBuild)、具体生成器(Builder)、指挥者(Director)。在生成器模式中,抽象生成器和具体生成器是必需的,指挥者类需要在实际问题中认真考虑,加以取舍。

[代码]java代码:

1
2
3
public class Unit1 {}
public class Unit2 {}
public class Unit3 {}

[代码]java代码:

1
2
3
4
5
6
//定义一个产品类
public class Product {
    Unit1 u1;
    Unit2 u2;
    Unit3 u3;
}

[代码]java代码:

1
2
3
4
5
6
7
//定义生成器类接口IBuild
public interface IBuild {
    public void createUnit1();
    public void createUnit2();
    public void createUnit3();
    public Product composite();//返回值是Product对象
}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class BuildProduct implements IBuild {//生成第一种Product
    Product p=new Product();//Product是成员变量
 
    @Override
    public void createUnit1() {
        //p.u1=...          //创建Unit1
    }
 
    @Override
    public void createUnit2() {
        //p.u2=...          //创建Unit2
    }
 
    @Override
    public void createUnit3() {
        //p.u3=...          //创建Unit3
    }
 
    @Override
    public Product composite() {
        //...               //关联Unit1,Unit2,Unit3
        return p;           //返回Product对象p
    }
 
}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class Director {
    private IBuild build;
    public Director(IBuild build){
        this.build=build;
    }
    public Product build(){
        build.createUnit1();
        build.createUnit2();
        build.createUnit3();
        return build.composite();
    }
    public static void main(String[] args) {
        IBuild build=new BuildProduct();
        Director direct=new Director(build);
        Product p=direct.build();
    }
}

2、利用Product派生类方法,也可以实现类似的生成功能。

[代码]java代码:

1
2
3
public class Unit1 {}
public class Unit2 {}
public class Unit3 {}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
//定义抽象生成器
public abstract class Product {
    Unit1 u1;
    Unit2 u2;
    Unit3 u3;
    abstract void createUnit1();    //表明子类要创建Unit1
    abstract void createUnit2();    //表明子类要创建Unit2
    abstract void createUnit3();    //表明子类要创建Unit3
    abstract void composite();      //表明子类要组合Unit1、Unit2、Unit3
}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//定义具体生成器
public class BuildProduct extends Product{
 
    @Override
    void createUnit1() {
         
    }
 
    @Override
    void createUnit2() {
         
    }
 
    @Override
    void createUnit3() {
         
    }
 
    @Override
    void composite() {
         
    }
 
}

[代码]java代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
//定义指挥者类
public class Director {
    Product p;
    public Director(Product p){
        this.p=p;
    }
    void build(){
        p.createUnit1();
        p.createUnit2();
        p.createUnit3();
        p.composite();
    }
}

设计模式Day02的更多相关文章

  1. IOC设计模式初步了解(day02)

    IOC(Inversion of Control):控制反转. *其他解释:依赖注入.依赖反转…… 设计目标:简化JEE的研发工作,提供IOC容器,控制bean的生成.注入,解耦. 看了网上的一些帖子 ...

  2. 简单的Dao设计模式

    简单的DAO设计模式 这两天学习到了DAO(Data Access Object 数据存取对象)设计模式.想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很 ...

  3. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  5. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  6. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  7. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  8. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  9. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

随机推荐

  1. 一步步学习ASP.NET MVC3 章节总结

    请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...

  2. swift基础--运算符

    (1)加减乘除 (2)三目运算,切记后面的空格如果不加会报错的.估计是苹果的bug. (3)聚合运算符,省却了一个判断,很人性化 (4)区间运算符 //加减乘除等等 let a = 2 let b = ...

  3. API HOOK

    API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...

  4. Delphi逆向

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 ...

  5. PowerDesigner15(16)在生成SQL时报错Generation aborted due to errors detected during the verification of the mod

    1.用PowerDesigner15建模,在Database—>Generate Database (或者用Ctrl+G快捷键)来生产sql语句,却提示“Generation aborted d ...

  6. [译]C++书籍终极推荐

    转载声明: 翻译仅以技术学习和交流为目的,如需转载请务必标明原帖链接. 来源:http://stackoverflow.com/questions/388242/the-definitive-c-bo ...

  7. *[topcoder]JumpFurther

    http://community.topcoder.com/stat?c=problem_statement&pm=12300&rd=15699 题意:有一个无限长的阶梯,i从1到N, ...

  8. __init和__exit宏的作用

    原文地址:http://blog.csdn.net/zhenwenxian/article/details/8564574 内核的部分函数带有__init和__exit宏,负责“初始化”和“清理收尾” ...

  9. 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

    解放方法 右键打开这个项目引用System.Web.Mvc,如图: 将复制本地的值改为True,英文的话应该是Copy Local,这样就解决了上面的报错问题.

  10. HeadFirst设计模式之RMI介绍

    一.使用步骤 1.generate stubs and skeletons:Run rmic on the remote implementation class 如:D:\Workspaces\My ...