zoukankan      html  css  js  c++  java
  • 桥接模式

      在实际生活中,某些事物由于自身的逻辑,具有两个或多个维度的变化。

      考虑这样一个场景:国家武装力量分为海军、陆军、空军三个军种,海陆空三军各自又有军师旅团营等

    建制。对于各个军种,以上的建制单位所包含的人数是不一样的。陆军人数较多,而空军人数较少。这样就

    产生了两个维度,一个是军种维度,另一个是具体的各个军种的建制制度。在军种制度,可以增加例如“外空”

    的新军种;在建制维度,可以修改在各个军种中的人数,或者增加一个新的军事单位。

      在软件设计中,又如何应对这种“多维度的变化”?如何巧妙的设计软件,使得系统可以沿着两个或多个维度

    进行独立地增加或者变化,而这种变化又不会对现有的类产生影响。这种场景可以使用桥接模式(Bridge Pattern)

    其意图是将一个软件设计的抽象部分与实现部分分离,使他们都可以独立地变化。

      在所设计的程序中有几个维度时,将抽象部分和实现部分分离的设计,可以使程序独立,互不影响地增加

    类,而不需要改变甚至不需要重新编译原来已经存在的类。

    现实实例:

      自动茶水销售机的实例:该机器销售的茶水在杯子的体积上分为中杯和大杯,在茶叶品种上分为红茶和绿茶,

    对其进行销售程序设计。

      类图设计 

     

       将抽象部分与实现部分分离开来,抽象部分为茶杯大小,实现部分为茶的种类,将其分离开来,这样就比

    较容易在茶的品种和茶杯的体积方面增加新的类。

      

    桥接模式的特点:

      (1)分离接口和实现部分。

      (2)提高可扩展性。可以独立的对抽象部分和实现部分进行扩展。

      (3)实现细节对客户的透明。可以客户隐藏实现细节。

      桥接模式强调对象有两个以上的维度变化,简化多级继承关系,但同时增加了聚合对象的内部方法,因为

    它不得不多写方法以便包含它的类调用。

  • 相关阅读:
    vue03
    vue02
    vue01
    VMware下Linux配置局域网和外网访问
    以太坊solidity编程常见错误(不定期更新)
    elasticsearch的探索之路
    一个rails项目连多个mongo数据库
    分析rails日志,计算响应率
    PostgreSQL新手上路PG::ConnectionBad (FATAL: Peer authentication failed
    cache目录没有权限
  • 原文地址:https://www.cnblogs.com/leilong/p/9121113.html
Copyright © 2011-2022 走看看