`
javabkb
  • 浏览: 53716 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

设计模式之创建模式之建造模式及原始模式模式

阅读更多
一、建造模式(Builder)
1,UML图
      


    抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建
造方法,比如本例子中的buildPart1()和buildPart2();另一种是结果返还方法,即本例
子中的retrieveResult().一般来说,产品所包含的零件数目与建造方法的数目相符。换言之,有多少零件,就有多少相应的建造方法。
    具体建造者(Concrete Builder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应该程序调用下创建产品的实例。这个角色要完成的任务包括:
    (1)实现抽象建造都(Builder)所声明的接口,给出一步一步地完成创建产品实例的操作。
    (2)在建造过程完成后,提供产品的实例。
    导演者(Director)角色:担任这个角色的类调用具体建造角色以创建产品对象。应当指出的是,导演者角色并没有产吕类的具体的知识,真正拥有产品类的具体知识的是具体建造角色。
    产品(Product)角色:产品(Product)便是建造中复杂对象。一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关联的。
2, 模式说明
  
    一个产品常有不同的组成成分作为产品的零件,这些零件可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation)。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式使客户端不需要知道所生成的产品对象有哪些零
件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎样组成产品。
3,模式示例代码
  
     package com.maohao.build.build;

     public class Product {
	public Product() {
            System.out.println("a product has been built");
	}
      } 
   


  
      package com.maohao.build.build;

      public interface Builder {

	  public void buildPart1();
	  public void buildPart2();
	  public Product retriveResult();
       }
   


   
       package com.maohao.build.build;
       public class MyBuilder implements Builder {

	 Product product = new Product();
	 @Override
	 public void buildPart1() {
		System.out.println("buildPart1");
	 }

	 @Override
	 public void buildPart2() {
		System.out.println("buildPart2");
	 }

	 @Override
	 public Product retriveResult() {
	    return product;   
	 }
        }
    


   
       package com.maohao.build.build;
       public class Director {

	   Builder builder;
	
	   public void buildProduct() {
		
		builder = new MyBuilder();
		builder.buildPart1();
		builder.buildPart2();
		Product product = builder.retriveResult();
	    }
        }
    


4,与其他模式比较
     
    与抽象工厂:都是创建模式,在抽象工厂模式中,每次工厂对象被调用时都会返还一个完整的产品对象。而客户端有可能会决定把这些产品组装成一个更大更复杂的产品,也有可能不会。
    建造类不同,它一点一点地建造出一个复杂的产品,而这个产品的组装过程就发生在建造者角色内部。建造者模式的客户拿到的是一个完整的最后产品。换言这,抽象工厂模式处在更加具
    体的尺度上,而建造模式则处于更加宏观的尺度上。一个系统可以由一个建造模式和一个抽象工厂模式组成,客户端通过调用这个建造角色,间接地调用另一个抽象工厂模式的工厂角色。
    工厂模式返还不同产品族的零件,而建造者模式则把它们组装起来。

    策略模式:建造模式在结构上很接近于策略模式,事实上建造模式是策略模式的一种特殊情况,这两种械的区别在于它们的用意不同。建造模式适用于为客户端一点一点地建造新的对象,而不同类型的具体建造者角色虽然拥有相同的接口,但是它们所创建出来的对象则可能完全不同。

    模板方法模式:建造模式在退化、失去导演者角色后,可以顺理成单地发展到模板方法模式。

    合成模式:正如前面说的,产品的零件可以是对象,也可以不是对象,而是对象的某种组成成分。当产品的零件确实是对象时,产品对象就变成了复合对象,因为产品内部还含有子对象。
    这种对象内含有子对象的结构,可以使用合成模式描述。换言之,合成模式描述一个对象树的组成结构,而建造模式则可以用来描述对象树的生成过程。

5,模式应用
   
   JavaMail中的Message和MimeMessage等  

二、原始模型(Prototype)模式
1,UML图

    客户(Client)角色:客户类提出创建对象的请求;
    抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口;
    具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
2, 模式说明
  
    原始模型属于对象的创建模式,通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类的对象。这就是原始模型的用意。
3,模式示例代码
    略了,见http://jminglee.iteye.com/blog/1315153

4,模式优缺点

   优点:(1)原始模型模式允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此,增加新产品对整个结构没有影响。
         (2)原始模型模式提供简化的创建结构。工厂方法模式常常需要一个与产品类等级结构相同的等级结构,而原始模型模式就不需要这样。对于Java设计师来说,原始模式又有其特有的方便之处,因为Java语言天生就将原始模型模式设计到了语言模型里面。善于利用原始模型模式和Java语言的特点,可以事半而功倍。
         (3)具有给一个应用软件动态加载新功能的能力。例如,一个分析Web服务器的记录文件的应用软件,针对每一种记录文件格式,都可以由一个相应的“格式类”负责。如果出现了应用软件不支持的新的Web服务器,只需要提供一个格式类的克隆,并在客户端登记即可,而不必给每个软件的用户提供一个全新的软件包。
         (4)产品类不需要非得有任何事先确定的等级结构,因为原始模型模式适于任何的等级结构。
    缺点:每一个类都必须配备一个克隆方法。配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类来说不是很难,而对于已经有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

5,与其他模式比较
     
    与抽象工厂:如系统不需要动态地改变原型对象,抽象工厂模式可以成为原始模型模式的替代品。

    工厂方法:如果原型对象只有一种,而且不会增加的话,工厂方法模式可以成为一种替代模式。

    原始模型模式:常常与原始模型模式一起使用。


6,模式应用
   
   Java语言自带了clone()方法,其中关于Java语言的深浅clone建议大家看下这篇blog:
                                        http://jminglee.iteye.com/blog/1315153
     
  • 描述: 建造模式UML
  • 大小: 27.7 KB
  • 描述: 原始模型模式
  • 大小: 18.1 KB
分享到:
评论

相关推荐

    C#23种设计模式_示例源代码及PDF

    建造模式: 从而使一个建造过程生成具有不 建造模式 将产品的内部表象和产品的生成过程分割开来, 同的内部表象的产品对象。 建造模式使得产品内部表象可以独立的变化, 客户不必知道产品 内部组成的细节。建造模式...

    23种设计模式.txt

     建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一...

    DesignPattern:23种设计模式,Android原始设计模式分析-android

    设计模式系列23种设计模式设计模式是一套被反复使用,多数人知道的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。本文将介绍23种设计模式。创建型...

    JAVA常用设计模式

    分类 创建模式 工厂模式;建造模式;原始模型模式;单例模式 结构模式 适配器;桥梁模式;合成模式;装饰模式;门面模式;享元模式;代理模式 行为模式 优点 面向界面编程 降低耦合性 增加灵活性

    浅析java常用的设计模式(doc-23页).doc

    浅析java常用的设计模式(doc 23页) 1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即 可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修 改。如:如何...

    CSharpDesignPatterns:C#设计模式实践

    创作设计模式工厂方法-使用多态性有条件地生成对象抽象工厂方法-在抽象类中包含多个工厂方法Singleton-线程安全的单个自包含实例在整个程序中共享建造者-导演控制建造者建造具有类似建造过程的各种产品原型-可以很...

    JAVA与模式

    <br>第三部份、创建模式 com.javapatterns.simplefactory 简单工厂模式 com.javapatterns.factorymethod 工厂方法模式 com.javapatterns.abstractfactory 抽象工厂模式 ...

    Easy-Programming:漫话编程:通俗易懂的分享基础知识,[数据结构与算法系列],[LeetCode系列],[子系统系列],[设计模式系列],[并发编程系列],[SQL编程] ...合集!同步更新到公众号CVBear以及在线博客http

    目的:直白的说设计模式是[原始阅读]的初步知识! 创建型模式 结构型模式 行为型模式 单例原型建造者工厂方法抽象工厂 代理适配器装饰装饰外观享元组合 策略命令职能链状态观察者中介者继承器访问者备注模板方法解释...

    java面试800题

    Q0051 设计模式主要几种 "创建模式 factory工厂模式、prototype原始模型模式、singleton单例模式、builder建造模式 结构模式 facade门面模式、proxy代理模式、adapter适配器(变压器)模式、composite合成模式、...

    java 面试题 总结

    新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把...

    超级有影响力霸气的Java面试题大全文档

    31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建...

    一个易于使用的 2D GUI 库,完全用 Rust 编写。

    建造者模式入门安装 Rust 和 Cargo运行 Conrod 示例你好,世界创建一个新项目连杆设置-后端创建一个窗口事件处理使用和自定义主题什么是Theme ?自定义主题序列化主题设计自定义小部件(使用小部件特征)Widget特征...

    C#微软培训资料

    第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 ...

Global site tag (gtag.js) - Google Analytics