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一起 ...
随机推荐
- Java :面向对象
Java :面向对象 直面Java 第001期 什么是面向过程 面向过程是以函数为中心,要解决一个问题,需要把问题分解为一个个的步骤,然后定义一系列的流程,用特定的输入经过函数的处理,最终输出特定的结 ...
- Tomcat服务器调优
一,目标:优化tomcat来提高访问的并发能力. 服务器提供的内存,cpu,以及硬盘的性能对数据的处理起决定性作用. tomcat的3种运行模式 tomcat的运行模式有3种: 1. bio默认的模式 ...
- 【SQL Server 学习系列】-- SQL查询数据库表字段值不为空或Null的所有列
) set @TableName = 'Agency' -- 表名 declare @querySql nvarchar(max) set @querySql = 'select ' ) declar ...
- OCP知识点讲解 之 队列、资源与锁:RHCA|OCM|CCIE RedHat大中华地区前50位RHCA系统架构师:叶绍琛
一.队列与共享资源 共享资源可以被多个会话.进程同时访问,因此它的访问需要保护.Oracle中,除了PGA,所有的东西(包括内存.磁盘.CPU.表.索引.事务等等,种类太多,一概用东西两字来代表) ...
- linux 虚拟网卡
linux中可以通过一个物理网卡,模拟出多个虚拟网卡,并在网卡中配置ip. 下面做一个实验. 实验描述: 我们有server A (ip 10.79.148.205),server B (10.79. ...
- linux 的硬链接与软连接
linux 里有硬链接和软连接两种概念.要明白这些概念首先要明白文件在linux 上其实有3个组成部分. data 真正的数据存储区域 inode 一个用来唯一表示data的数据结构 filename ...
- php设计模式——模板模式
最近打算巩固,整理一下设计模式相关的内容.这篇是关于 ——模板模式! 原文:http://www.jb51.net/article/76052.htm ----------------------- ...
- CNN卷积神经网络的改进(15年最新paper)
回归正题,今天要跟大家分享的是一些 Convolutional Neural Networks(CNN)的工作. 大家都知道,CNN 最早提出时,是以一定的人眼生理结构为基础,然后逐渐定下来了一些经典 ...
- react 项目实战(一)创建项目 及 服务端搭建
1.安装 React社区提供了众多的脚手架,这里我们使用官方推荐的create-react-app. //安装脚手架 npm install -g create-react-app //生成并运行项目 ...
- leetcode02-Add Two Numbers之beats98.68%Java版本号
我的leetcode之旅,该篇章主要完毕使用Java实现算法. 这是第二篇Add Two Numbers 所有代码下载: Github链接:github链接,点击惊喜; 写文章不易.欢迎大家採我的文章 ...