Objective-C设计模式——桥接Bridge(接口适配)
桥接模式
桥接模式就是让抽象和实现分离的最好体现,符合面向对象的依赖倒转原则。Abstruct抽象类负责设计客户端接口,Implementor则负责具体的细节逻辑。
在桥接模式中,Abstruct类持有一个Implementor类的引用,该引用也是桥接的两个对象的唯一通信点。
应用场景
1.不想在抽象与其实现之间形成固定的绑定关系(这样就能在运行时切换实现);
2.抽象及其实现都应该可以通过子类化独立进行扩展;
3.对抽象的实现进行修改不应该影响客户端代码;
4.如果每一个实现需要额外的子类以进行细化抽象,则说名有必要把它们分成两个部分;
5.如果每个实现需要额外的子类以细化抽象,则说明有必要把它们分成两个部分;
6.想在带有不同抽象接口的多个对象之间共享一个实现。
适配器与桥接
适配器和桥接可以说非常相似,都是包装一个类提供通用接口以适应客户端。
但是适配器都是在代码维护阶段或者非架构阶段用来修补的一种方式,也就是说如果现在有两个现成的模块要进行对接,但是想要修改两边的接口都比较困难,这时候就用适配器来辅助对接。
桥接一般是在架构阶段使用,使用桥接来分离抽象和实现,能够使细节得以复用,并且解耦合的一种方式。
Demo
Abstruct
#import <Foundation/Foundation.h>
#import "Implementor.h"
@interface Abstruct : NSObject -(void)sayName;
-(void)setImplementor:(Implementor *)newImplementor; @end #import "Abstruct.h"
#import "Implementor.h" @implementation Abstruct Implementor *_implementor; -(void)setImplementor:(Implementor *)newImplementor{
_implementor = newImplementor;
} -(void)sayName{
[_implementor sayFirstName];
[_implementor sayLastName];
} @end
Implementor
#import <Foundation/Foundation.h> @interface Implementor : NSObject -(void)sayFirstName;
-(void)sayLastName; @end #import "Implementor.h" @implementation Implementor -(void)sayFirstName{
NSLog(@"%@",NSStringFromClass([self class]));
} -(void)sayLastName{
NSLog(@"%@",NSStringFromClass([self class]));
} @end #import <Foundation/Foundation.h>
#import "Implementor.h"
@interface ConcreateImplementorA : Implementor @end #import <Foundation/Foundation.h>
#import "Implementor.h" @interface ConcreateImplementorB : Implementor @end
ConcreateImplmentorA、B实现中没有写任何代码(偷懒了)
客户端
Abstruct *abstruct = [Abstruct new];
ConcreateImplementorA *implementA = [ConcreateImplementorA new];
ConcreateImplementorB *implementB = [ConcreateImplementorB new]; [abstruct setImplementor:implementA];
[abstruct sayName]; [abstruct setImplementor:implementB];
[abstruct sayName];
结果
-- ::10.215 Bridge[:] ConcreateImplementorA
-- ::10.217 Bridge[:] ConcreateImplementorA
-- ::10.217 Bridge[:] ConcreateImplementorB
-- ::10.217 Bridge[:] ConcreateImplementorB
Objective-C设计模式——桥接Bridge(接口适配)的更多相关文章
- Java设计模式---桥接Bridge模式
参考于 : 大话设计模式 马士兵设计模式视频 写在开头: 桥接模式主要用于一件事物分成了两个维度,进行排列组合,比如礼物,可以分成优雅的礼物(抽象),花(具体),排列组合优雅的花! 1.为什么使用桥接 ...
- 设计模式--桥接(Bridge)模式
1.概述: 桥接模式:把抽象和行为分离开来,中间需要某个介质来连接抽象化和行为化.此模式的概述听起来非常像适配器模式,不要搞混了,虽然都是借用中间介质,但意义不同.最典型的桥接模式就是:JDBC.通过 ...
- 【设计模式】Bridge模式(桥接模式)
最近的一次面试中,被问到桥接模式,以前呢并没有很仔细的研究过这个设计模式,借此机会剖析一下. 先给出自己对这个模式理解后的源码: interface A{ void methodA(); } inte ...
- C#设计模式-桥接模式(Bridge Pattern)
引言 例如我有好几个项目,需要外包出去做各种类型的测试,不同的公司基础费用不同,不同的测试类型价格也是不同的.此时不同的项目选择不同的公司和不同类型的测试进行测试价格都是不同的.于是我们可以创建一个项 ...
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 设计模式初探-桥接(Bridge)模式
桥接(Bridge)模式,又称Handle/Body模式,属于对象结构型模式.用于将抽象部分与它的实现部分分离,使它们都可以独立地变化.比如常见的电脑窗口界面,不同的操作系统其窗口界面绘制的原理肯定不 ...
- Objective-C设计模式——外观Faced(接口适配)
外观模式 外观设计模式和适配器差不多,不过它门对对象控制的粒度不同,适配器一般只是控制一个系统和客户端的对接.外观则是用来抽象多个系统一起工作. 外观一般具有多个子系统,所以外观应持有多个子系统的引用 ...
- java设计模式——桥接模式
一. 定义与类型 定义:将抽象部分与他的具体实现部分分离,使它们都可以独立的变化,通过组合的方式建立两个类之间的联系,而不是继承 类型:结构性. 二. 使用场景 (1) 抽象和具体实现之间增加更多的灵 ...
- 【设计模式】Java设计模式 - 桥接模式
[设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
随机推荐
- P1765 手机_NOI导刊2010普及(10)
P1765 手机_NOI导刊2010普及(10) 题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 ...
- Minimum Path Sum(DFS,DP)
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- 18.10.7 POIN 模拟赛
期望 :80+ +90+40=210+ 实际 :30+90+0=120 链接:https://www.nowcoder.com/acm/contest/175/A来源:牛客网 时间限制:C/C++ 1 ...
- CCNA参考链接
http://www.cisco.com/c/en/us/support/docs/lan-switching/vtp/10558-21.html http://www.cisco.com/c/en/ ...
- 改變iTunes備份路徑
*** 在任意分區建立文件夾用來移動iTunes原有備份 *** 例如:move"c:\user\vhd\appdata\roaming\apple computer"全部到&qu ...
- C# VS如何整个项目中查找字符串
Ctrl+F打开查找对话框,然后输入查找字符串,电机右边的小三角,选择整个解决方案,就可以遍历所有文件查找指定字符了
- js 获取文件本地路径
1.代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- vuex资料
vuex最简单.最详细的入门文档 链接:https://segmentfault.com/a/1190000009404727 https://www.jb51.net/article/138239. ...
- NHibernate之旅(8):巧用组件之依赖对象
本节内容 引入 方案1:直接加入 方案2:巧用组件 实例分析 结语 引入 通过前面7篇的学习,有点乏味了~~~这篇来学习一个技巧.大家一起想想假设我要在Customer类中实现一个Fullname属性 ...
- text recognizer (OCR) Engine 光学字符识别
https://github.com/tesseract-ocr/tesseract/wiki https://github.com/UB-Mannheim/tesseract/wiki C:\Use ...