iOS设计模式(二)桥接模式

2018-05-12  本文已影响28人  handsome5
桥接模式
  • 1.定义
    将抽象部分与实现部分分离,使它们都可以独立的变化.
  • 2.原理
    抽象层与实现层相分离,抽象层定义了供客户端调用的抽象接口,实现层提供了具体的逻辑,实现类的引用被封装到抽象层的实例中,桥接就形成.
桥接模式UML图 桥接模式UML.png
demo演示 - 桥接模式
#import <Foundation/Foundation.h>
#import "TV.h"

@interface Remote : NSObject

@property (nonatomic,strong)TV *tv;

-(void)setCommand:(NSString *)command;

@end

#import "Remote.h"

@implementation Remote

- (void)setCommand:(NSString *)command
{
    //桥接的形成
    [self.tv loadCommand:command];
}
@end
#import "Remote.h"

@interface SubRemote : Remote

- (void)up;
- (void)down;
- (void)left;
- (void)right;
@end

#import "SubRemote.h"

@implementation SubRemote

- (void)up
{
    [super setCommand:@"up"];
}
- (void)down
{
    [super setCommand:@"down"];
}
- (void)left
{
     [super setCommand:@"left"];
}
- (void)right
{
  [super setCommand:@"right"];
}
@end
#import <Foundation/Foundation.h>

@interface TV : NSObject

- (void)loadCommand:(NSString *)command;

@end

#import "TV.h"

@implementation TV

//抽象方法
- (void)loadCommand:(NSString *)command
{
//无需实现    
}
@end
#import "TV.h"
@interface XiaoMiTV : TV
@end

#import "XiaoMiTV.h"

@implementation XiaoMiTV

- (void)loadCommand:(NSString *)command
{
    if ([command isEqualToString:@"up"]) {
        NSLog(@"你按的是xiaoMi====:%@",command);
    }
    else if ([command isEqualToString:@"down"]) {
        NSLog(@"您按的是XM:----%@",command);
    }
    else if ([command isEqualToString:@"left"]) {
        NSLog(@"您按的是XM:----%@",command);
    }
    else if ([command isEqualToString:@"right"]) {
        NSLog(@"您按的是XM:----%@",command);
    }
    else {
        NSLog(@"超出范围");
    }
}
@end
#import "TV.h"

@interface HaiXinTV : TV

@end

#import "HaiXinTV.h"

@implementation HaiXinTV

- (void)loadCommand:(NSString *)command
{
        if ([command isEqualToString:@"up"]) {
            NSLog(@"你按的是HaiXin====:%@",command);
        }
        else if ([command isEqualToString:@"down"]) {
            NSLog(@"您按的是HaiXin:----%@",command);
        }
        else if ([command isEqualToString:@"left"]) {
            NSLog(@"您按的是HaiXin:----%@",command);
        }
        else if ([command isEqualToString:@"right"]) {
            NSLog(@"您按的是HaiXin:----%@",command);
        }
        else {
            NSLog(@"超出范围");
        }
}
@end
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@end

#import "ViewController.h"
#import "SubRemote.h"
#import "XiaoMiTV.h"
#import "HaiXinTV.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    SubRemote *subRemote = [[SubRemote alloc] init];
    XiaoMiTV *xmTV = [[XiaoMiTV alloc] init];
    subRemote.tv = xmTV;
    [subRemote up];
    [subRemote down];
    
    HaiXinTV *hxTV = [[HaiXinTV alloc] init];
    subRemote.tv = hxTV;
    [subRemote up];
    [subRemote down];
}
@end
测试结果 测试.png
小结
  • 桥接模式的特点:
    1.将依赖具体的实现,该为依赖抽象,起到一个松耦合的作用.
    2.分离了接口实现部分.
    3.提高扩展性.
demo地址:https://github.com/defuliu/BrigePatterns.git
上一篇下一篇

猜你喜欢

热点阅读