zoukankan      html  css  js  c++  java
  • 设计模式 结构型模式

    1. 适配器模式

    • 意图
      将一个类的接口转换成客户希望的另外一个接口,适配器模式使得由于接口不兼容而不能一起工作的那些类可以一起工作
    • 实现要点
      Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
      Adapter模式有对象适配器和类适配器两种,但类适配器采用“多继承”实现,带来了不良的高耦合,不推荐。对象适配器采用“对象组合”方式,更符合松耦合精神。
    • 详见
      http://www.cnblogs.com/houleixx/archive/2008/03/04/AdapterPattern.html

     2. 桥接模式

    • 意图
      将抽象部分与实现部分分离,使它们都可以独立的变化。
    • 实现要点
      Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。
      所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意它们,从而获得不同平台上的不同型号。
      Bridge模式有时候类似于多继承方案,但是多继承方案往往违背了类的单一职责原则,复用性比较差。Bridge模式是比多继承方案更好的解决方法。
      Bridge模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈——换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。
    • 详见
      http://terrylee.cnblogs.com/archive/2006/02/24/336652.html

    3. 装饰模式

    • 意图
      动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
    • 使用场景
      动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
      需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
      需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
    • 总结
      Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。同时它很好地符合面向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。
    • 详见
      http://terrylee.cnblogs.com/archive/2006/03/01/340592.html

    4. 组合模式

    • 意图
      将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
    • 要点
      组合模式以不遵守单一责任原则换取透明性,让Client将组合和叶节点一视同仁。
      在实现组合模式时,有很多设计上的折衷。要根据需求平衡透明性和安全性。
      有时候系统需要遍历一个树枝构件的子构件很多次,这时候可以把遍历结果缓存起来。
      组合模式的实现中,可以让子对象持有父对象的引用进行反向追溯。
    • 适用性
      你想表示对象的部分-整体层次结构。
      你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
    • 详见
      http://www.cnblogs.com/god_bless_you/archive/2010/06/10/1755844.html

    5. 外观模式

    • 意图
      为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。 
    • 原理
      此模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。简单的说,就是外观模式将一个或者多个类的复杂的操作进行了隐藏,只显示出一个一致的界面供客户端使用。需要注意的是,外观模式仅仅是给你提供了更为直接和容易的操作方式,它并没有把原来的子系统进行隔离,所以,如果你还需要子系统类的更高层的功能,还是可以使用原来的子系统的,这个是外观模式的一大优点。通过外观模式可以将子系统的多个接口上建立一个高层接口,并且将这个高层接口提供给客户端使用,这样便可以解除掉客户端和复杂子系统之间的耦合。
    • 要点
      外观模式并没有把子系统和客户端隔离开来,只是提供了整洁的接口给客户端,如果客户端想访问复杂子系统中的接口时还是一样的可以访问的。
    • 详见
      http://www.cnblogs.com/tianzhiliang/archive/2011/09/30/2196249.html

    6. 代理模式

    • 意图
      为其他对象提供一种代理以控制对这个对像的访问。
    • 适用场合
      远程代理:为一个对象在不同的地址空间提供局部代表
      虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
      安全代理:用来控件真实对象访问时的权限
      智能指引:当调用真实的对象时,代理处理另外一些事
    • 详见
      http://www.cnblogs.com/seesea125/archive/2012/05/18/2508159.html
  • 相关阅读:
    本地连不上远程mysql数据库(2)
    linux后台执行命令:&和nohup
    uva 10806 Dijkstra, Dijkstra. (最小费最大流)
    VS2013带来的"新特性"
    HDOJ 5091 Beam Cannon 扫描线
    2014百度之星资格赛4题
    二维码登陆
    安装Sublime配合quick-cocos2d-x开发
    J2SE核心开发实战(二)——字符串与包装类
    LeetCode_3Sum Closest
  • 原文地址:https://www.cnblogs.com/raysbo/p/2922123.html
Copyright © 2011-2022 走看看