设计模式大总结(一)

设计模式结束一段时间了,总结一直没有跟上来发表,以下我把我的小小的总结拿出来与大家共同探讨一下。

设计模式看了两遍了。第一遍具体通读了一下课本。第二遍着重敲样例再次读课本,而且做总结,尽管过了两遍。但感觉设计模式的精髓还是没有非常好的理解,自己如今或许理解的仅仅有冰山一角。希望通过接下来的学习中。将设计模式运用到实践其中去。

争取可以非常好地站稳在巨人的肩膀上。以下做一个阶段性总结,有什么不妥的地方希望大家踊跃指正。

设计模式有六大基本原则。前面的博文我进行了具体解说(http://blog.csdn.net/zhangzijiejiayou/article/details/28110119http://blog.csdn.net/zhangzijiejiayou/article/details/28387323),而设计模式就是遵循六大基本原则的,分为三个类别模式,虽然每个设计模式可能仅仅遵循六大基本原则中的几个,但运用正确我们就会变得不简单。而六大基本原则又是基于面向对象的。所以通过设计模式的灵活运用能够实现面向对象的长处。

创建型模式

创建型模式隐藏了这些类的实现是怎样被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口.这样,创建型模式在创建了什么、谁创建它、它是怎么被创建的。以及何时创建这些方面提供了非常大的灵活性。

抽象工厂:提供一个创建一系列或相关依赖对象的接口,而无需指定它们详细的类

长处:(1)能够解决多个类型的产品创建问题,实现同一个对象与多个数据库ORM(对象关系映射)

(2)让详细的创建实例过程与client分离,client通过抽象接口操作实例,产品的详细类也被详细工厂分离,不会出如今客户代码中

缺点:假设添加需求,修改量比較大。但模板模式通过Clone。能够非常好的复用。

建造者:将一个复杂对象的构建与它的表示分离,使得相同的构建过程能够创建不同的表示

长处:使得建造代码与表示代码分离。因为建造者隐藏了该产品是怎样组装的,所以若须要改变一个产品的内部表示,仅仅须要定义一个详细的建造者就能够了。

缺点:对象内部的构建面临着复杂的变化

工厂方法:定义一个用于创建对象接口,让子类决定实例化哪一个类,工厂模式使得一个类的实例化延迟到其子类.

长处:克服了简单工厂违背开放—封闭原则的缺点,保持了封装对象创建过程的长处。更换对象时不须要做大的修改就能够实现,减少了客户程序与产品对象的耦合。

缺点:每添加一个产品就须要加一个产品类,添加了额外的开发量。

模板模式

原型模式:用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新型的对象

长处:一般在初始化的信息不发生变化的情况下,克隆是最好的办法。

这既隐藏了对象创建的细节,又对性能是大大的提高。原型模式能够做到无缝扩展,通过Clone比其他模式效果要好。

缺点:每一个对象都实现这样的方法工作量大

单例模式:保证一个类仅有一个实例,并提供一个訪问它的全局訪问点

长处:让类自身负责保存它的唯一自身负责保存它的唯一实例,这个类能够保证没有其他实例被创建,而且还提供一个訪问该实例的方法。能够严格控制客户如何以及何时訪问它。

结构型模式

结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。

适配器模式:将一个类的接口转换成客户希望的还有一个接口。适配器模式使得原本由接口不兼容而不能一起工作的那些类能够一起工作。

长处:客户代码能够统一调用同一接口。

缺点:类适配器。对于Java、C#等不支持多重继承的语言,一次最多仅仅能适配一个适配者类,并且目标抽象类仅仅能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同一时候适配到目标接口。对象适配器,与类适配器模式相比,要想置换适配者类的方法就不easy。

桥接模式:将抽象部分与它的实现部分分离,使它们都能够独立的变化。

长处:降低了耦合度

桥接模式和适配器模式的比較

同样:这个模式和适配器模式具有一些共同的特征,就是给还有一个对象提供一定程度的间接性,有利于系统的灵活性。

不同:两个模式用于软件生命周期的不同阶段,针对的是不同的问题

桥接模式和抽象工厂、适配器模式能够组合使用。

组合模式:将对象组合成树形结构以表示‘部分-总体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

长处:基本对象能够被组合成更复杂的组合对象。而这个组合对象又能够组合,这样不断地递归下去,客户代码中。不论什么用到基本对象的地方都能够使用组合对象。

装饰模式:动态地给一个对象加入一些额外的职责。

就添加功能来说,装饰模式相比生成子类更加灵活。

长处:把类中的装饰功能从类中搬移出去。能够简化原有的类

外观模式:为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加easy使用。

长处:设计初期应该有意识将不同的两个层分离

开发阶段子系统不断重构演化变得复杂。产生很多小类。通过外观模式可提供一个小的接口,降低他们间的依赖。

维护遗留的大型系统时一般用外观模式。

外观模式和适配器模式比較

同样:都是对现存系统的封装。

不同:外观模式是定义一个新的接口,适配器复用一个原有的接口。

外观模式针对的对象的粒度更大。

享员模式:为运用共享技术有效地支持大量细粒度的对象。

长处:能够避免大量很相似累的开销。

代理模式:为其他对象提供一种代理以控制这个对象的訪问

长处:代理模式通过代理实现了client和实体之间的联系,减少了实体和client的联系。

代理对象能够在client和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

接下来的文章,会给大家介绍一下行为模式,敬请期待吧!

时间: 2024-10-10 00:22:45

设计模式大总结(一)的相关文章

【转载】设计模式大集合

原文: 设计模式大集合 最近要做架构了,得把设计模式整理一遍.因为这玩意,设计时能用就用,所以得明白啥时候用.不过要是成本太高了,或者根本低耦合没意义,就没必要用.这里列出使用场合(仅限于设计阶段),而且这文章不是给没学过的人看的,复习用的. 另外,并行设计模式不在本文范围内. Creational Pattern:(创建类,描述怎样低耦合的创建对象) Abstract Factory: 抽象工厂.当程序中对象分为并行的不同族(例如gnome和KDE),创建特定族的对象用此模式(例如创建一个窗口

设计模式大总结(二)

上篇博客给大家介绍了六大原则和设计模式之间的关系,以及创建型模式和结构型模式 (http://blog.csdn.net/zhangzijiejiayou/article/details/32712779).本文将给大家介绍行为型模式. 行为型模式 是对在不同的对象之间划分职责和算法的抽象化. 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到 通知并被自动更新. 优点:在解耦合,让耦合的双方都依赖于抽象的接口而不是具体,从而使各自的变化都不会影响

设计模式大类--行为模式(上)

大概有10中行为模式,分为上中下三篇.一.Template(模板)描述:定义一些操作算法的骨架,将其实现延迟到其子类好处:扩展性强 例子:Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: public abstract class Benchmark{ /** * 下面操作是我们希望在子类中完成 */ public abstract void benchmark(); /** * 重复执行benchmark次数 */ public fina

设计模式大类--结构模式(上)

大概有7中结构模式,分为上下两篇.一.Adapter(适配器)描述:将两个不兼容的类结合一起使用,一般需要用到其中某个类的若干方法好处:在两个类直接创建一个混合接口,而不必修改类里面的其他代码 例子:假设我们要打桩,有两种类:方形桩 圆形桩.public class SquarePeg{ public void insert(String str){ System.out.println("SquarePeg insert():"+str); } } public class Roun

设计模式大类--结构模式(下)

五.Decorate(装饰者)描述:动态的给一个对象添加额外的职责,比继承达到更好的灵活性好处:某些功能需要用户动态决定加入方式和时机,装饰者提供即插即用的模型 例子:举Adapter中的打桩示例,在Adapter中有两种类:方形桩 圆形桩,Adapter模式展示如何综合使用这两个类,在Decorator模式中,我们是要在打桩时增加一些额外功能,比如,挖坑 在桩上钉木板等,不关心如何使用两个不相关的类我们先建立一个接口:public interface Work{ public void ins

设计模式大总结

为期1月份的设计模式之旅已走完,我们今天一起来总结咱们前面的东西:其实设计模式分为:创建模式.结构模式.行为模式.它们分别是对应那些呢? 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式. 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式. 行为型模式:模版方法模式.命令模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式.状态模式.策略模式.职责链模式.访问者模式. Abstract Factory(抽象工厂模式):提供一个创建一

设计模式大类--行为模式(中)

四.Chain of Responsibility(责任链)描述:一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去好处:降低了类之间的耦合性 例子:抽象处理者角色public abstract class Handler { /** * 持有后继的责任对象*/protecte

设计模式大类--行为模式(下)

七.Strategy(策略模式)描述:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化.优点:各个部分之间是弱连接 的关系,弱连接的特性使软件具有更强的可扩展性 ,易于维护 :更重要的是,它大大提高了软件可重用性 . 例子:举例(TreeSet .TreeMap就是很好的例子 )public class Test { /*客户端*/ public static void main(String[] args) { //面向接口 Strat

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体