zoukankan      html  css  js  c++  java
  • 设计模式大总结(一)

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

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

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

       设计模式有六大基本原则。前面的博文我进行了具体解说(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和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

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




  • 相关阅读:
    Chrome Extension 扩展程序 小白入门
    gulp 打包报错:ReferenceError: internalBinding is not defined
    error in static/js/xxx.js from UglifyJs Unpected token: punc() [static/js/xxx.js]
    ES6-
    浏览器的渲染原理(转载)
    nodeType、nodeName和nodeValue
    浏览器 HTTP 协议缓存机制详解
    JS函数的上下文环境
    ready和onload的区别
    自定义事件
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5228673.html
Copyright © 2011-2022 走看看