美文网首页设计模式
iOS与桥接模式

iOS与桥接模式

作者: PepperCurry | 来源:发表于2016-12-09 23:30 被阅读192次

首先,什么是桥接模式呢?
想到公司有个面试题是有关花和蜜蜂的,花开蜜蜂来采蜜,花谢蜜蜂回巢。把这个场景改造下,来说明今天的主题:

花园里有牵牛花,花开的时候蜜蜂来采蜜
那么我们可能就会这样来设计:

@interface QianniuHua : NSObject
@property (nonatomic, strong) Bee *bee;
  - (void)bloom;
@end

突然有一天,花园里多了牡丹花,牡丹花开的时候蝴蝶会来采蜜
这个简单,我们再增加一个牡丹花类就好了:

 @interface MudanHua : NSObject
 @property (nonatomic, strong) Butterfly *butterfly;
   - (void)bloom;
 @end

那么接下来呢?花园里的花会越来越多,昆虫也会越来越多。更重要的是,牵牛花蜜并不一定是由蜜蜂来采,蝴蝶也不一定单单只喜欢牡丹花。所以要实现的是牵牛花与蜜蜂的解耦,蝴蝶与牡丹花的解耦。牡丹花可以由蜜蜂蝴蝶飞蛾蜂鸟来采蜜,蜜蜂也可以去采集牡丹花牵牛花槐花蜜。花有不同的类型,昆虫有不同的种类,那么如何设计才能适应两方面的变化呢?

这就是今天想要介绍的桥接模式:
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

将抽象部分与实现部分分离,使它们都可以独立的变化。
——《设计模式》GOF

具体的结构如下:


桥接模式

图中可以看到

  • Abstraction是一个虚基类,Operation()调用Implemetor的OperationImp()方法
  • Implemetor父类有两个子类A和B。
  • 两个基类间的关系是聚合关系,Abstrction是整体,Implementor是部分,说白了就是Implementor是Abstraction的成员变量。

好了,下面用桥接模式来实现下面这个比较简单的场景:
花园里有一朵牵牛花和一朵牡丹花,牵牛花开会吸引蜜蜂来采蜜,牡丹花开会吸引蝴蝶来采蜜

@interface AbstractInsect : NSObject
- (void)bloomImp;
@end

@interface AbstractFlower : NSObject
@property (nonatomic, strong) AbstractInsect *insect;
- (void)bloom;
@end

@interface QianniuHua : AbstractFlower
@end

@implementation QianniuHua
- (void)boom {
    NSLog(@"牵牛花开了");
    [self.insect bloomImp];
}
@end

@interface MudanHua : AbstractFlower
@end

@implementation MudanHua
- (void)bloom {
    NSLog(@"牡丹花开了");
    [self.insect bloomImp];
}
@end

@interface Butterfly : AbstractInsect
@end

@implementation Butterfly
- (void)bloomImp {
    NSLog(@"蝴蝶来了");
}
@end

@interface Bee : AbstractInsect
@end

@implementation Bee
- (void)bloomImp {
    NSLog(@"蜜蜂来了");
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        QianniuHua *qianniu = [[QianniuHua alloc] init];
        qianniu.insect = [[Bee alloc] init];
        [qianniu bloom];
        
        MudanHua *mudan = [[MudanHua alloc] init];
        mudan.insect = [[Butterfly alloc] init];
        [mudan bloom];
        
    }
    return 0;
}

运行结果:

2016-12-08 23:45:46.281 DesignPattern[10832:226597] 牵牛花开了
2016-12-08 23:45:46.282 DesignPattern[10832:226597] 蜜蜂来了
2016-12-08 23:45:46.282 DesignPattern[10832:226597] 牡丹花开了
2016-12-08 23:45:46.282 DesignPattern[10832:226597] 蝴蝶来了

以上就是一个比较简单的桥接模式,如果有什么理解不当的地方,欢迎批评指正!
本文系作者原创,转载请注明出处

相关文章

  • iOS与桥接模式

    首先,什么是桥接模式呢?想到公司有个面试题是有关花和蜜蜂的,花开蜜蜂来采蜜,花谢蜜蜂回巢。把这个场景改造下,来说明...

  • iOS桥接模式

    桥接模式 桥接(Bridge Pattern)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式...

  • iOS 桥接模式

    生活中的场景: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路...

  • iOS 桥接模式

    桥接模式抽象出层次结构。上层抽象接口的职能,实现上层抽象接口的职能,层级间的通信协议(可以抽象为接口)。桥接模式的...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 设计模式-桥接模式

    桥接模式介绍 桥接模式(Bridge Pattern)也称为桥梁模式,是结构型设计模式之一。顾名思义其与现实中的桥...

  • iOS设计模式-桥接模式

    问题: 假如:我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3x12=36支,但如...

  • 【iOS开发】iOS中的桥接

    ios-关于桥接 iOS-关于桥接Ios中的桥接 关键点 iOSSDK中的框架做分层处理 CoreFoundati...

  • iOS设计模式之桥接模式

    桥接模式 1、什么是桥接模式 将抽象部分与实现部分分离,使它们都可以独立的变化。 桥接模式一共有两个角色: 抽象角...

网友评论

    本文标题:iOS与桥接模式

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