10-桥接模式

2020-04-29  本文已影响0人  二斤寂寞

桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】

处理多维度变化——桥接模式(一):跨平台图像浏览系统
处理多维度变化——桥接模式(二):桥接模式概述
处理多维度变化——桥接模式(三):跨平台图像浏览系统的桥接模式解决方案
处理多维度变化——桥接模式(四):适配器模式与桥接模式的联用,桥接模式总结

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。

介绍

注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。


桥接模式的特点:
1. 将依赖具体的实现,改为依赖抽象. 得到松耦合的状态
2. 分离了接口和实现部分
3. 提高了扩展性.

Demo地址

一图胜千言.png

01、抽象类空调,用于接收指令,具体的指令操作由子类(格力空调,海尔空调)去完成、

#import <Foundation/Foundation.h>

@interface AirConditioner : NSObject

// 空调接收命令 
- (void)loadCommand:(NSString *)command;

@end

02、遥控器抽象类 持有空调属性,可以执行某些操作命令,具体的某些命令(调风向,调冷热)由子类去完成

#import <Foundation/Foundation.h>
#import "AirConditioner.h"

@interface Remote : NSObject

@property (nonatomic,strong) AirConditioner *airConditioner;

// 遥控器给空调发送指令
- (void)setCommand:(NSString *)command;

@end

#import "Remote.h"

@implementation Remote

- (void)setCommand:(NSString *)command {
    
    [self.airConditioner loadCommand:command];
}

@end


子类调风向实现: (调温度的类似)

#import "DirectionRemote.h"

@implementation DirectionRemote

- (void)up {
    [super setCommand:@"up"];
}

- (void)down {
    
    [super setCommand:@"down"];
}

- (void)left {
    
    [super setCommand:@"left"];
}

- (void)right {
    [super setCommand:@"right"];
}

@end

示例:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
  
    //海尔空调
    HaierAirConditioner *haierAirConditioner =  [[HaierAirConditioner alloc] init];
    
    //控制风向
    DirectionRemote *directionRemote = [[DirectionRemote alloc] init];
    //让海尔空调往上吹风
    directionRemote.airConditioner = haierAirConditioner;
    [directionRemote up];
    
    //控制温度
    TemperatureRemote *temperatureRemote = [[TemperatureRemote alloc] init];
    //让海尔空调更冷
    temperatureRemote.airConditioner = haierAirConditioner;
    [temperatureRemote colder];
    
    //让格力空调往下吹热风
    GeliAirConditioner *geliAirConditioner =  [[GeliAirConditioner alloc] init];
    
    directionRemote.airConditioner = geliAirConditioner;
    [directionRemote down];
    temperatureRemote.airConditioner = geliAirConditioner;
    [temperatureRemote warmer];
}
@end
image.png
上一篇 下一篇

猜你喜欢

热点阅读