美文网首页
桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern)

作者: long弟弟 | 来源:发表于2022-09-13 18:30 被阅读0次

桥接模式,桥梁模式

意图:将抽象和实现解耦,让它们可以独立变化。

桥接模式基于类的最小设计原则,通过使用封装、聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

桥接模式的目的就是把抽象层次结构从具体的实现中分离出来,使其能够独立变更。抽象层次定义了供客户端使用的上层抽象接口。实现层结构定义了供抽象层使用的底层接口。实现类的引用被封装到抽象层的实例中,桥接就形成了。

桥接模式.jpg

角色和职责

  1. Client
    桥接模式的使用者
  2. Abstraction
  • 定义抽象类的接口(接口或抽象类)
  • 维护一个指向Implementor类型对象的指针
  1. Refined Abstraction
    Abstraction子类
  2. Implementor
    定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。(Abstraction接口定义了基于Implementor接口的更高层次的操作)
  3. ConcreteImplementor
    Implementor子类

代码示例

#import <Foundation/Foundation.h>
//抽象发动机类
@interface Engine : NSObject
@end
@implementation Engine
- (void)installEngine {
    NSAssert(NO, @"使用子类实现该方法");
}
@end

//具体的发动机A类
@interface EngineA : Engine
@end
@implementation EngineA
- (void)installEngine {
    NSLog(@"安装发动机EngineA");
}
@end

//具体的发动机B类
@interface EngineB : Engine
@end
@implementation EngineB
- (void)installEngine {
    NSLog(@"安装发动机EngineB");
}
@end

//抽象车类
@interface Car : NSObject
- (instancetype)initWithEngine:(Engine *)engine;
@property (nonatomic, strong) Engine *engine;
@end
@implementation Car
- (instancetype)initWithEngine:(Engine *)engine {
    if (self = [super init]) {
        self.engine = engine;
    }
    return self;
}
- (void)installEngine {
    NSLog(@"抽象汽车类安装抽象发动机Engine");
}
@end

//具体的宝马车类
@interface BMW : Car
@end
@implementation BMW
- (instancetype)initWithEngine:(Engine *)engine {
    if (self = [super init]) {
        self.engine = engine;
    }
    return self;
}
- (void)installEngine {
    NSLog(@"依赖");
    [self.engine installEngine];
}
@end

//具体的五菱宏光车类
@interface SGMW : Car
@end
@implementation SGMW
- (instancetype)initWithEngine:(Engine *)engine {
    if (self = [super init]) {
        self.engine = engine;
    }
    return self;
}
- (void)installEngine {
    NSLog(@"依赖");
    [self.engine installEngine];
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Engine *engine = [[EngineA alloc] init];
        Car *car = [[BMW alloc] initWithEngine:engine];
        [car installEngine];
        //车和发动机之间自由组合
        engine = [[EngineB alloc] init];
        car = [[SGMW alloc] initWithEngine:engine];
        [car installEngine];
    }
    return 0;
}
/*
 依赖
 安装发动机EngineA
 依赖
 安装发动机EngineB
 */

用处举例

  1. 车安装发动机
    不同型号的车,安装不同类型的发动机
    车 持有(依赖) 发动机 发动机里面有安装
  2. 图形填充颜色
    不同形状的图形,填充不同的颜色
  3. 遥控器 遥控电视机
    不同的遥控器 按键遥控不同的电视机
  4. 列表 加载不同的网络数据
    iOS TableView加载不同的网络数据
    ...

优点

  1. 抽象和实现分离
  2. 优秀的扩展能力
  3. 实现细节对客户透明

缺点

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

相关文章

  • 设计模式解析—桥接设计模式

    桥接模式(Bridge Pattern)定义和使用场景 定义桥接模式(Bridge Pattern):将抽象部分...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型-桥接(Bridge)

    桥接(Bridge) [TOC] 定义 桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模...

  • 桥接模式(结构型)

    桥接模式[https://www.runoob.com/design-pattern/bridge-pattern...

  • Android 设计模式入门到精通之十二:桥接模式(Bridge

    桥接模式(Bridge Pattern,桥梁模式) 1. 概念 Decouple an abstraction f...

  • 桥接模式

    介绍 桥接模式(Bridge Pattern) 也称为桥梁模式,是结构型设计模式之一。桥接模式的作用就是连接 "两...

  • 结构型-Bridge

    桥接模式的原理解析 桥接模式,也叫作桥梁模式,英文是 Bridge Design Pattern。这个模式可以说是...

  • 桥接模式-Bridge Pattern

    在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够...

  • 桥接模式(Bridge Pattern)

    桥接模式:使用桥接模式不只改变你的实现,也改变你的抽象。 桥接模式是将抽象和实现分离,使他们能够各自独立的变化。 ...

网友评论

      本文标题:桥接模式(Bridge Pattern)

      本文链接:https://www.haomeiwen.com/subject/ifsegrtx.html