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一起 ...
随机推荐
- 洛谷 P4181 [USACO18JAN]Rental Service
P4181 [USACO18JAN]Rental Service 题意翻译 farmer john有N(1≤N≤100,000)头牛,他想赚跟多的钱,所以他准备买牛奶和出租牛.有M(1≤M≤100,0 ...
- MongoDB小结26 - 地理空间索引
现在有一种查询变得越来越流行(尤其是移动设备):找到离当前位置最近的N个场所. MongoDB专为平面坐标查询做了专门的索引,称为地理空间索引. 同样需要用ensureIndex创建,不过,参数是两个 ...
- git: 保存帐号信息
One line command: git config credential.helper store
- hibernate之多对一单向关联
一个工作组(Group)里能够有多个用户(User),一个User仅仅属于一个Group,这是典型的多对一的关系. 在多对一的关系中正确的数据库设计是在多的这方(在这里是User这方)加一个Group ...
- Office 佳能MP259打印EXCEL线条歪曲,字迹模糊怎么办
这大概是墨盒的缘故,判断方法很简单,随便找一个文档,点击打印,属性 在维护选项卡中把清洗和打印头对齐做一遍(一般字迹模糊可以通过清洗解决,线条歪曲可以通过打印头对齐解决),如果你打印的结果是纸张边 ...
- socket简单理解
要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主 ...
- iOS开发中訪问相冊摄像像头
iOS开发中訪问相冊摄像像头 源代码下载地址http://download.csdn.net/download/jingjingxujiayou/7270479 在AppDelegate.m文件里 - ...
- JavaScriptSerializer 序列号datatime时少了8小时
有人说主要的因素是在于JSON格式不直接支持日期和时间. 简单一点处理办法是ToLocalTime()一下:dt = dt.ToLocalTime(); 参考http://blog.csdn.net/ ...
- javascript下将字符类型转换成布尔值
办不到!孙子,我告诉你,这办不到! 比如说, var sb = "false"; alert(!!sb);//结果显示true! 事前是想得很美的: sb == "fal ...
- SQLServer2012连接数据库报错
尝试读取或写入受保护的内存 这通常指示其他内... CMD 输入 netsh winsock reset,重启计算机即可