一、建造模式(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#中的 Activator.CreateInstance() 方法可以作为简单工厂的实现,而更复杂的抽象工厂模式则用于创建相关的对象家族。 ...
2. 建造模式:建造模式的主要思想是将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。这种模式的优点是客户不必知道产品内部组成的细节,并且可以强制实行一种分...
《研磨设计模式源码》是一份非常宝贵的资源,它提供了设计模式的实践代码,帮助开发者深入理解并应用这些模式。设计模式是软件工程中经过长期实践总结出来的一套通用解决方案,它们描述了在特定场景下如何解决常见...
C#版的设计模式通过C#代码实例,深入浅出地展示了各种设计模式的应用场景及优缺点。 一、C#面向对象程序设计复习 C#作为一种面向对象的编程语言,其设计模式的实现往往与面向对象的原则紧密相连。复习面向对象的三...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这些模式在软件开发中被广泛使用,因为它们能够使代码更可读、可维护和可扩展。在这个名为"java设计模式程序源代码"的压缩包...
《设计模式:基于C#的工程化实现及扩展》是一份深入探讨软件设计模式的宝贵资源,它提供了C#语言下的具体实现与扩展,旨在帮助开发者提升代码的可读性、可维护性和可复用性。这个压缩包包含了多个源码文件,分别命名...
设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式共五种: * 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 * 抽象工厂模式(Abstract ...
下面,我们将深入探讨23种常用的JAVA设计模式,这些模式分为三大类:创建型模式、结构型模式和行为型模式。 #### 二、创建型模式 创建型模式关注的是对象的创建机制,确保系统在合适的时候创建对象,以及如何创建...
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端需要创建一个对象时,它不会直接实例化对象,而是请求一个专门的工厂对象来创建。这样可以将对象创建的...
设计模式通常分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建,如单例(Singleton)、工厂方法(Factory Method)和建造者(Builder)模式等。结构型模式涉及如何组合类和对象,例如适配器(Adapter...
建造模式将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。这种模式使得构建过程可以灵活地变化。 5. 责任链模式(Chain of Responsibility) 责任链模式为解除请求的发送者和接收者之间...
建造模式: 从而使一个建造过程生成具有不 建造模式 将产品的内部表象和产品的生成过程分割开来, 同的内部表象的产品对象。 建造模式使得产品内部表象可以独立的变化, 客户不必知道产品 内部组成的细节。建造模式...
6. 建造者模式:建造者模式是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,可以通过创建一个构建者类和多个指导者类来实现建造者模式,这样可以更灵活地...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。这些模式都是经验丰富的开发者在实践中总结出的成熟设计思想,旨在提高代码的可读性、可维护性和灵活性。在...
设计模式是软件工程中的一种最佳实践,它是在特定情境下为了解决常见问题而形成的一套可复用的解决方案。在Java编程中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性。这个名为“23种设计模式示例代码”...
在C#中,设计模式不仅限于原始的23种GoF模式,还涵盖了一些现代的模式,比如装饰器模式在ASP.NET MVC中的应用,以及Repository模式用于数据访问层的抽象。此外,C# 5.0及更高版本引入了异步编程模型,使得异步编程...
在软件开发领域,设计模式是经过时间和实践验证的解决方案模板,用于解决常见编程问题。C#作为.NET框架的主要编程语言,拥有丰富的设计模式支持。这个压缩包中的代码示例为学习和理解C#设计模式提供了宝贵的资源。...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**(Creational Pattern): 1. **工厂模式**:提供一个创建对象的接口,让子类决定实例化哪一个类,从而使代码独立于具体的实现。 2. **...
在Android系统中,设计模式是开发者理解和驾驭代码的关键。这些模式源自《设计模式:可复用面向对象软件的基础》一书,由“Gang of Four”(GoF)提出,被广泛应用于各种软件开发中,尤其是在Android框架内。本文将...