美文网首页
桥接模式

桥接模式

作者: QG不吃鱼的猫 | 来源:发表于2018-01-02 17:46 被阅读4次

桥接模式简介

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

原理:抽象层和实现层分离,抽象层提供了客户端调用的抽象接口,实现层提供了具体的逻辑。实现类的引用被封装到抽象层的实例中,桥接就形成了。

UML图-demo


意图

1、把电视机进行抽象;

2、对电视机抽出不同子类化,去进行各种操作指令的处理;

3、抽象出遥控器类,桥接电视机抽象类,电视机对象进行指令的处理setCommand();

4、对遥控器进行子类化,定义具体的指令方法,子类里的方法去调用父类的setCommand();

我勒个去,逻辑是不是抽离的很干净?万能遥控器,小手指点一点,可以同时去控制小米和康佳,而且不用考虑小米和康佳内部是怎么操作滴。

上代码:

抽象类TV

@interface TV : NSObject

// 电视机提供给外界调用的一个方法

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

@end

#import "TV.h"

@implementation TV

- (void)loadCommand:(NSString *)command {}

@end

XIAO米 康佳子类

#import "TV.h"

@interface TVXiaoMI : TV

@end

#import "TVXiaoMI.h"

@implementation TVXiaoMI

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

    if ([command isEqualToString:@"up"]) {

        NSLog(@"您按的是XM:----%@",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 TVKJ : TV

@end

#import "TVKJ.h"

@implementation TVKJ

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

        if ([command isEqualToString:@"up"]) {

                NSLog(@"您按的是KJ:----%@",command);

        } else if ([command isEqualToString:@"down"]){

                NSLog(@"您按的是KJ:----%@",command);

        } else if ([command isEqualToString:@"left"]){

                NSLog(@"您按的是KJ:----%@",command);

        } else if ([command isEqualToString:@"right"]){

                NSLog(@"您按的是KJ:----%@",command);

    } else {

                NSLog(@"超出范围");

        }

}

@end

抽象遥控器

#import "TV.h"

@interface Remote : NSObject

@property (nonatomic, strong) TV *tv;

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

@end

#import "Remote.h"

@implementation Remote

- (void)setCommand:(NSString *)commmand {

        [self.tv loadCommand:commmand];

}

@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

调用

// 遥控器调用康佳电视

    SubRemote *subremote = [[SubRemote alloc] init];

    subremote.tv = [[TVKJ alloc] init];

    [subremote up];

    // 遥控器来调用小米

    subremote.tv = [[TVXiaoMI alloc] init];

    [subremote up];

    [subremote down];

打印结果:

2018-01-02 17:46:06.453398+0800 BridgeDemo[5094:457451] 您按的是KJ:----up

2018-01-02 17:46:06.453598+0800 BridgeDemo[5094:457451] 您按的是XM:----up

2018-01-02 17:46:06.453748+0800 BridgeDemo[5094:457451] 您按的是XM:----down

相关文章

  • 设计模式-桥接模式

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

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式之桥接模式

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

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

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

  • 桥接模式与中介模式

    桥接模式-BRIDGE 对桥接模式感兴趣,是因为公司业务上需要桥接Html5和ReactNative两个平台。桥接...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 桥接模式

    桥接模式 参考原文: https://zhuanlan.zhihu.com/p/62390221 定义 桥接模式 ...

  • 10-桥接模式

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

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

网友评论

      本文标题:桥接模式

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