http://blog.csdn.net/joyney/category/434480.aspx
http://www.jdon.com/designpatterns/index.htm
http://www.cnblogs.com/kid-li/category/44668.html
简单工厂模式、工厂方法模式、抽象工厂模式三种工厂模式详细解读
Singleton 单件模式解决的问题是:实体对象个数问题(这个现在还不太容易混)
FactoryMethod 工厂方法模式解决的问题是:某个对象的创建工作
http://www.runoob.com/design-pattern/factory-pattern.html
AbstractFactory 抽象工厂模式解决的问题是:“一系列互相依赖的对象”的创建工作.
http://www.runoob.com/design-pattern/abstract-factory-pattern.html
工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
这两个模式区别在于需要创建对象的复杂程度上 。
Builder 生成器模式解决的问题是:“一些复杂对象”的创建工作, 子对象变化较频繁,对算法相对稳定
1、 原型模式:prototype模式:
注意:原型模式是通过拷贝自身来创建新的对象,这一点和其他创建型模式不相同。
java.lang.Object 本身即定义有 clone() 方法 ,因此所有的对象基本上 皆具自我复制之能力,不过真正要让对象支持复制,则对象必须实作 java.lang.Cloneable 这个接口 。
2、建造者模式:builder模式
Builder模式是一步一步创建一个复杂的对象,因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.
http://uule.iteye.com/admin/blogs/1200975
Builder模式与AbstractFactory模式的区别:
建造者模式(Builder)与抽象工厂模式很相象,但是,Builder返回完整的一个产品,而AbstractFactory返回一系列有关系的产品;在抽象工厂模式中,客户采用AbstractFactory生成自己要用的对象,而在建造者模式中,客户指导Builder类如何生成对象,或者如何合成一些类来构成建造类,侧重于一步步构造一个复杂对象,然后将结果返回。
ConcreteBuilder builder = new ConcreteBuilder(); Director director = new Director(builder); director.construct(); House house = builder.getHouse();
参考:http://blog.csdn.net/joyney/archive/2009/03/18/4000741.aspx
http://www.blogjava.net/amigoxie/archive/2007/03/18/104610.html
http://www.jdon.com/designpatterns/builder.htm
3、Singleton模式
主要作用是保证一个类Class只有一个实例存在。
注意默认构造函数。
http://uule.iteye.com/blog/2385012
4、外观模式:Facade模式
为子系统中的一组接口提供一个一致的界面.
从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到 Facade 接口的变化。
http://uule.iteye.com/admin/blogs/2385120
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
何时使用:
1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
2、定义系统的入口。
如何解决:客户端不与系统耦合,外观类与系统耦合。
关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
2、JAVA 的三层开发模式。
3、一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
5、代理模式:Proxy模式
代理模式的作用是:为对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到三个角色:
抽象角色 :声明真实对象和代理对象的共同接口;
代理角色 :代理对象角色 内部含有对真实对象的引用,从而可以操作真实对象 ,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色 :代理角色所代表的真实对象,是我们最终要引用的对象。
6、适配器模式:Adapter模式
1.概念:
把一个类的接口变换成客户端所希望的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
(就是将两个类的方法组合起来,使其可以在一个类中使用!)
2.两种形式
a.类的适配器模式 b.对象的适配器模式
http://uule.iteye.com/admin/blogs/2385053
http://www.iteye.com/topic/339198
http://www.iteye.com/topic/74417
7、模板模式:Template模式
http://www.runoob.com/design-pattern/template-pattern.html
使用场景:
1、有多个子类共有的方法,且逻辑相同。
2、重要的、复杂的方法,可以考虑作为模板方法。
一. 模式概述
摸板方法(Template Method)模式是一种非常简单而又经常使用的设计模式.先创建一个父类,把其中的一个或多个方法留给子类去实现 ,这实际上就是在使用摸板模式.所谓的摸板模式可以这样来理解:"在一个类中定义一个算法,但将此算法的某些细节留到子类中去实现.换句话说,基类是一个抽象类,那么你就是在使用一种简单形式的摸板模式."
二. 模式意图
将一个类的基本部分抽取出来放到一个基类中,这样它就不必重复出现在几个派生类里.
模式结构与参与者
抽象摸板角色:
1. 定义了一个或多个抽象操作,以便让子类实现.
2. 定义并实现了一个摸板方法.
具体摸板角色:
1. 实现父类所定义的一个或多个抽象方法.
2. 每一个抽象摸板角色都可以有任意多个具体摸板角色与之对应.
3. 每一个具体摸板角色都可以给出这些抽象方法的不同实现.
8、装饰模式:Decorator模式
装饰器模式(Decorator Pattern,或油漆工模式)允许向一个现有的对象添加新的功能,同时又不改变其结构。
譬如我们将把一个形状装饰上不同的颜色,同时又不改变形状类。
http://uule.iteye.com/admin/blogs/2385114
优点:装饰模式和继承都是对功能的扩展,而装饰模式使用的是组合,可以不用继承而达到这一效果。使用过多的继承会增加系统的复杂性和偶合性
不使用类继承来扩展对象功能。
缺点:装饰模式要产生一些辅助性的对象,但这些对象看上去都比较像,不是很容易检查(好的命名应该是提高检查的一个办法)
主要是解决:“过度地使用了继承来扩展对象的功能 ”
装饰模式和继承都是对功能的扩展,而装饰模式使用的是组合,使用过多的继承会增加系统的复杂性和偶合性。
上面调用类似我们读取文件时的调用:
FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr);
实际上Java 的I/O API就是使用Decorator模式实现的,I/O变种很多,如果都采取继承方法,将会产生很多子类,显然相当繁琐.
java.io库是最好的例子
想要扩展功能,装饰者提供了有别于继承的另外一种选择。是一个很好的符合了开闭原则的设计模式。
总结:适配器模式主要是为了接口的转换,而装饰者模式关注的是通过组合来动态的为被装饰者注入新的功能或行为(即所谓的责任)。
适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增强新的行为和责任;而外观将一群对象包装起来以简化其接口
7、组合模式:composite模式
将对象组合成树形结构 以表示部分和整体的层次结构.
组合模式使得用户对单个对象和组合对象的适用具有一致性.
组合模式是将对象之间的关系以数据结构中的2 叉树表现出来,使得客户端将单纯的元素与复杂元素同等看待,这样的话使得用户在操作不同的子类元素时可以和根节点元素一样操作,在透明模式下即根元素和叶元素公用同一个接口达到共同的结果。
组合模式就是解决部分与整体的关系的一种模式。
意图 :
将对象组合成树形结构以表示“整体 - 部分”的层次结构。 Composite 使得用户对单个对象和组合对象的使用具有一致性
动机 :
客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(非抽象接口)的变化将引起客户代码的频繁变化代码的代码维护和扩展的困难,我们需要将客户代码与复杂的对象容器结构解偶。
适用性 :
l 想表示对象的部分 - 整体层次结构
l 希望用户忽略组合对象与单个对象的不同 ,用户将统一地使用组合结构中的所有对象。
结构 :
参与者 :
l 抽象构件( Component )角色 ( IComposite )
l 树叶构件( Leaf )角色 (Employees )
l 树枝构件 (Boss)
Composite 模式的优点 :
1. 客户代码不依赖复杂对象本身的结构变化
2. 用户不需要特别关心复杂对象的具体结构只要等同于根对象操作
http://uule.iteye.com/blog/868224
9、桥接模式: Bridge模式
将抽象部分与实现部分分离 ,使它们都可以独立的变化。
任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。
在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。
http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html
http://www.jdon.com/designpatterns/bridge.htm
http://flysnail.iteye.com/blog/183668
11、备忘录模式:memento模式
1. 定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
2. 使用的原因
想要恢复对象某时的原有状态
public class Originator { public int number; public File file = null; public Originator(){} // 创建一个Memento public Memento getMemento(){ return new Memento(this); } // 恢复到原始值 public void setMemento(Memento m){ number = m.number; file = m.file; } }
private class Memento implements java.io.Serializable{ public int number; public File file = null; public Memento( Originator o){ number = o.number; file = o.file; } }
可见 Memento中保存了Originator中的number和file的值. Originator中number和file值改变的话,通过调用setMemento()方法可以恢复.
Memento模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
http://www.jdon.com/designpatterns/memento.htm
http://blog.csdn.net/joyney/archive/2009/04/07/4054594.aspx
http://peirenlei.iteye.com/blog/364399
12、
相关推荐
总结来说,李建忠先生的“设计模式总结”涵盖了C#中广泛使用的设计模式,强调了它们在实际项目中的应用价值。理解并熟练运用这些模式,对于提升C#开发者的专业素养和项目质量具有重大意义。无论是初学者还是经验丰富...
本篇文章将对一系列重要的C#面向对象设计模式进行总结,帮助开发者更好地理解和应用这些模式。 1. 工厂模式:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了代码与具体类...
设计模式总结,对23种经典模式的分类,各自的使用方法,优缺点进行详细的描述。
大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf
本总结文档涵盖了所有的设计模式,并对常用的模式进行了详细解释,非常适合程序员在面试前快速复习以及日常学习使用。 文档中提到的六大设计原则,包括单一职责原则、里氏替换原则、接口隔离原则、迪米特法则、开闭...
这里主要针对标题“Java设计模式总结”以及描述中提及的资源进行深入阐述。 1. **设计模式的概念**: 设计模式并非具体的代码或库,而是一种在特定上下文中解决常见问题的模板。它们描述了如何在面向对象设计中以...
在《23种设计模式总结及案例》中,通常会涵盖以下主要的设计模式类型: 1. 创建型模式:这类模式主要关注对象的创建过程,使得系统在不指定具体类的情况下创建对象,提高代码的灵活性。包括单例模式(Singleton)、...
设计模式总结主要包括创建型、结构型和行为型这三大类,每类模式都有其特定的应用场景和目标。 1. 创建型模式(创建对象的模式) - 工厂方法模式:允许将对象的创建过程推迟到子类中,使得代码更具可扩展性和灵活...
设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图,可以被反复使用,以提高代码的可读性、可维护性和灵活性。在Java编程中,23种经典的设计模式被广泛认可并应用,这些模式分为三大...
设计模式总结 设计模式是软件设计中的一种重要概念,它们是经过实践和经验总结出的优秀设计解决方案。设计模式的应用可以使软件设计更加灵活、可维护、可扩展和可重用。本文档对设计模式进行了总结和归纳,主要包括...
### 设计模式总结篇 #### 引言 在软件开发领域,设计模式作为一种重要的方法论,对于提升软件质量、增强代码可维护性和可扩展性具有不可替代的作用。本文旨在总结和探讨设计模式的相关知识,包括架构设计原则、...
Spring设计模式总结 在软件开发中,设计模式是解决常见问题的经验总结,它们为程序员提供了在特定场景下设计高效、可维护代码的蓝图。在Spring框架中,许多设计模式被广泛应用,以提升系统的灵活性和可扩展性。以下...
《.Net 面向对象及设计模式总结》是一份深度涵盖.Net开发中面向对象编程原理和设计模式的宝贵资料,特别适合初学者巩固基础知识,以及有经验的开发者进行复习和提升。通过阅读这些笔记,我们可以深入理解面向对象的...
自己根据老师的课件的和讲解,总结的关于程序设计模式的知识,拿出来和大家分享一下,希望能帮到和我一样,在学设计模式时遇到困难的同学。
### 设计模式总结:模板设计模式与单例模式 #### 模板设计模式 模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,...
"设计模式总结-java与模式清晰版"这个标题表明我们即将探讨的是关于Java编程语言中的设计模式,旨在帮助开发者更好地理解和应用这些模式。这篇博文链接(https://410063005.iteye.com/blog/1680031)可能提供了详细...
设计模式总结 设计模式是软件设计中的一种解决方案,旨在解决软件设计中的一些常见问题。以下是设计模式的总结,涵盖了多种设计模式的概念、特点和应用场景。 一、类图备注 * +public:公共成员变量或方法 * -...
设计模式总结 设计模式是软件开发中的一种解决方案,它提供了一种通用的解决方案来解决常见的软件设计问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式(Creational Patterns) *...
java23种设计模式总结 . 设计模式 1.1 创建型模式 1.1.1 工厂方法 1.1.2 抽象工厂 1.1.3 建造者模式 .. 1.1.4 单态模式 .. 1.1.5 原型模式 . 1.2 结构型模式 ... 1.2.1 适配器模式 1.2.2 桥接模式 ........