iOS设计模式之桥接模式
一,什么是桥接模式
定义
抽象出层次结构。
上层抽象接口的职能,实现上层抽象接口的职能,层级间的通信协议(可以抽象为接口)。
桥接模式的目的,就是把抽象层次结构从具体的实现中分离出来,使其能够独立变更。抽象层次定义了供客户端使用的上层抽象接口。实现结构定义了供抽象层使用的底层接口。实现类的引用被封装到控制类抽象层的实例中,桥接就形成了。使用场景
游戏机模拟器、H5混编解决方案
二,桥接模式结构图
实现步骤:
- 创建控制类基类,并定义变量持有具体实现类基类对象关系。
- 创建控制类基类子类,和实现类基类,并在控制器类接口方法中使用基类实现类对象实现功能(基类已经让控制器建立了持有实现类对象的关系)。
- 在控制器内调用控制器子类,建立控制器持有实现类对象。
结构图:

三,代码实现
- 基类
- 控制器基类
- ConsoleController
- ConsoleController.h
#import <Foundation/Foundation.h>
#import "ConsoleEmulator.h" @interface ConsoleController : NSObject /**
* 抽象模拟器
*/
@property (nonatomic, strong) ConsoleEmulator *emulator; /**
* 执行指令
*
* @param command 指令
*/
- (void)excuteCommand:(ConsoleCommand)command; @end - ConsoleController.m
#import "ConsoleController.h" @implementation ConsoleController - (void)excuteCommand:(ConsoleCommand)command {
[_emulator loadInstructionsForCommand:command];
[_emulator excuteInstructions];
} @end
- ConsoleController.h
- ConsoleController
- 实现基类
- ConsoleEmulator
- ConsoleEmulator.h
#import <Foundation/Foundation.h> typedef enum : NSUInteger { kConsoleCommandUp,
kConsoleCommandDown,
kConsoleCommandLeft,
kConsoleCommandRight, kConsoleCommandSelect,
kConsoleCommandStart, kConsoleCommandAction1,
kConsoleCommandAction2, } ConsoleCommand; @interface ConsoleEmulator : NSObject /**
* 加载指令
*
* @param command 指令
*/
- (void)loadInstructionsForCommand:(ConsoleCommand)command; /**
* 执行指令
*/
- (void)excuteInstructions; @end - ConsoleEmulator.m
#import "ConsoleEmulator.h" @implementation ConsoleEmulator - (void)loadInstructionsForCommand:(ConsoleCommand)command {
// 由子类重载实现
}
- (void)excuteInstructions {
// 由子类重载实现
}
@end
- ConsoleEmulator.h
- ConsoleEmulator
- 控制器基类
- 子类
- 控制器基类
- GameBoyConsoleController
- GameBoyConsoleController.h
#import "ConsoleController.h" @interface GameBoyConsoleController : ConsoleController - (void)up;
- (void)down;
- (void)left;
- (void)right; - (void)select;
- (void)start; - (void)action1;
- (void)action2; @end - GameBoyConsoleController.m
#import "GameBoyConsoleController.h"
@implementation GameBoyConsoleController
- (void)up {
[super excuteCommand:kConsoleCommandUp];
} - (void)down {
[super excuteCommand:kConsoleCommandDown];
}
- (void)left {
[super excuteCommand:kConsoleCommandLeft];
}
- (void)right {
[super excuteCommand:kConsoleCommandRight];
}
- (void)select {
[super excuteCommand:kConsoleCommandSelect];
}
- (void)start {
[super excuteCommand:kConsoleCommandStart];
}
- (void)action1 {
[super excuteCommand:kConsoleCommandAction1];
}
- (void)action2 {
[super excuteCommand:kConsoleCommandAction2];
}
@end
- GameBoyConsoleController.h
- GameBoyConsoleController
- 实现子类
- GameBoyEmulator
- GameBoyEmulator.h
#import "ConsoleEmulator.h"
@interface GameBoyEmulator : ConsoleEmulator
- (void)loadInstructionsForCommand:(ConsoleCommand)command;
- (void)excuteInstructions;
@end - GameBoyEmulator.m
#import "GameBoyEmulator.h"
@implementation GameBoyEmulator
- (void)loadInstructionsForCommand:(ConsoleCommand)command {
NSLog(@"GameBoyEmulator loadInstructionsForCommand");
}
- (void)excuteInstructions {
NSLog(@"GameBoyEmulator excute");
}
@end
- GameBoyEmulator.h
- GameBoyEmulator
- 控制器基类
- 打印结果:
-- ::13.226801+ BridgePattern[:] GameBoyEmulator loadInstructionsForCommand
-- ::13.226970+ BridgePattern[:] GameBoyEmulator excute
-- ::13.227075+ BridgePattern[:] GameGearEmulator loadInstructionsForCommand
-- ::13.227162+ BridgePattern[:] GameGearEmulator excute
四,优缺点
- 优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
- 缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
五,demo
桥接模式
iOS设计模式之桥接模式的更多相关文章
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- java设计模式7——桥接模式
java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...
- C#设计模式之八桥接模式(Bridge)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第二个模式,该模式是[桥接模式],也有叫[桥模式]的.大家第一次看到这个名称会想到什么呢?我第一次看到这个模式根据名称猜肯定是连接什么东西的.因为桥在我们现实 ...
- C#设计模式之七桥接模式(Bridge Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第二个模式,该模式是[桥接模式],也有叫[桥模式]的,英文名称:Bridge Pattern.大家第一次看到这个名称会想到什么呢?我第一次看到这个模式根据名称 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
- 设计模式之桥接模式(Bridge)
注:本文不属于原创,而是根据原文重新整理,原文是:我给媳妇解释设计模式:第一部分 设计模式不是基于理论发明的.相反,总是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成“模式”. ...
随机推荐
- QCOW2/RAW/qemu-img 概念浅析
目录 目录 扩展阅读 RAW QCOW2 QEMU-COW 2 QCOW2 Header QCOW2 的 COW 特性 QCOW2 的快照 qemu-img 的基本使用 RAW 与 QCOW2 的区别 ...
- 类TreeMap
TreeMap类 import java.util.Set; import java.util.TreeMap; public class IntegerDemo { public static vo ...
- .net refactor 命令行
VS中设置项目的编译后事件命令(此命令会在程序集生成后自动在原位置加密,覆盖原来的程序集): "C:\Program Files (x86)\Eziriz\.NET Reactor\dotN ...
- 【ABAP系列】SAP ABAP 利用class创建客户/供应商主数据
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP 利用class创建 ...
- Spring Boot 之 Redis
一.pom.xml引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- 003--PowerDesigner创建索引与外键
PowerDesigner创建索引与外键 一.创建索引 双击Table->Columns->创建索引 Step1:双击Table Step2:选择Columns->创建索引 弹出如下 ...
- 简述Vue中的计算属性
1.什么是计算属性 如果模板中的表达式存在过多的逻辑,那么模板会变得臃肿不堪,维护起来也异常困难,因此为了简化逻辑出现了计算属性: <template> <div id=" ...
- [Git] 003 初识 Git 与 GitHub 之加入文件 第二弹
在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第二弹 1. 选择已有的文件,点击右侧的 edit 2. 在文件中继续写入文字 小发现:我只写到第 6 行,commit 后再点进去,发现 ...
- JAVA总结--代码规范
一.命名规范 1.标识符:统一.达意.简洁 统一:一个词有多种表达方式,不求最好,但求统一:例:供应商,既可以用supplier,也可以用provider,选择一种统一使用: 达意:明确表达其意义,正 ...
- 收集慕课网讲解的border知识
1.使用boeder辅助background-posi定位 2.使用border实现三道杠图标 3.利用border实现--鼠标放上去后,改变图标的颜色