• 桥接模式


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

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

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

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

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

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

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

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

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

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

    现实实例:

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

    对其进行销售程序设计。

      类图设计 

     

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

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

      

    桥接模式的特点:

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

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

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

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

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

  • 相关阅读:
    Codeforces 1131 C. Birthday-暴力 (Codeforces Round #541 (Div. 2))
    Codeforces 1131 B. Draw!-暴力 (Codeforces Round #541 (Div. 2))
    DP之背包经典三例
    博弈规律综概
    腾讯面试题:杯子质量(最优查找)
    洛谷P1308——单词统计
    AtCoder Regular Contest 069 D
    Codeforces 782C. Andryusha and Colored Balloons 搜索
    Codeforces 799D. String Game 二分
    Codeforces 767B. The Queue 模拟题
  • 原文地址:https://www.cnblogs.com/leilong/p/9121113.html
Copyright © 2020-2023  润新知