zoukankan      html  css  js  c++  java
  • 【结构型】Bridge模式

        桥接模式是为了将对象的抽象与实现分离,使得它们可以独立变化。简简单单的一句话,却已经是站在了更高抽象层面上来看待、设计、解决问题。平常我们多是对具体问题进行分析、抽象,然后就开始设计,这对多数情况下基本完全够用,毕竟实际项目中的功能模块都是找一“最优解的"实现来解决掉问题,把功能设计出来即可。这种情况下的结构关系图参考如下:

        这种抽象设计的缺点是:如果解决问题的方式不止一种,则必需为以上所有Concrete类都是实现对应的具体版本,这样不但类继承体系十分复杂,后期只要随便增加一种实现方式,都将要增加N个对应的新class。为解决这类问题,需要将问题的具体实现剥离出来单独抽象,并在问题抽象层面与实现抽象层面做个关联桥接即可。从而在问题抽象层面上,就不需要关心当前问题是如何被解决的(即:如何实现的)。改进后的类关系图(即:Bridge模式的类关系图参考如下):

        从关系图中可看出,不论是日后增加新Target,还是扩展新实现方式,对于逻辑结构都不需要做调整,也不会因为扩展了新的实现而引起整个Target系列的动荡。模式的编码结构参考如下:

     1 namespace bridge
     2 {
     3     class IImpl;
     4     class ITarget
     5     {
     6     public:
     7         virtual void doSomething() = 0;
     8         // some code here........
     9 
    10     protected:
    11         IImpl* getImpl() { return _impl; }
    12 
    13     private:
    14         IImpl* _impl;
    15 
    16     };//class ITarget
    17 
    18     class ConcreteTarget : public ITarget
    19     {
    20     public:
    21         virtual void doSomething() override {
    22             auto pImpl = this->getImpl();
    23             if (nullptr != pImpl) {
    24                 pImpl->realDoSomething();
    25             }
    26             // some other code here........
    27         }
    28 
    29     };//class ConcreteTarget
    30 
    31     class IImpl
    32     {
    33     public:
    34         virtual void realDoSomething() = 0;
    35 
    36     };//class IImpl
    37 
    38     class ConcreteImpl1 : public IImpl
    39     {
    40     public:
    41         virtual void realDoSomething() override { /* some code here........ */ }
    42 
    43     };//class ConcreteImpl1
    44 
    45     class ConcreteImpl2 : public IImpl
    46     {
    47     public:
    48         virtual void realDoSomething() override { /* some code here........ */ }
    49 
    50     };//class ConcreteImpl2
    51 
    52 }//namespace bridge
    Bridge模式编码结构参考
  • 相关阅读:
    访问通讯录并设置联络人信息
    创建提醒事项
    iOS 高仿:花田小憩3.0.1
    iOS 手机淘宝加入购物车动画分析
    VTMagic 的使用介绍
    React Native 从入门到原理
    用户数据攻略-获取日历事件
    键盘收回方法
    提高jQuery执行效率需要注意几点
    你应该了解的jquery 验证框架
  • 原文地址:https://www.cnblogs.com/tongy0/p/5526116.html
Copyright © 2011-2022 走看看