Objective-C 桥接模式 -- 简单实用和说明

桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的

比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合

然后生成这两个抽象类的实例XBox & XBox主机 以达到解耦

同时还能再继承为其他的游戏机

因为是控制器在控制主机, 所以控制器抽象类会持有主机抽象类

BaseControl.h

 1 #import <Foundation/Foundation.h>
 2 #import "BaseGameSystem.h"
 3
 4 @interface BaseControl : NSObject
 5
 6 @property (nonatomic, strong) BaseGameSystem *gameSystem;
 7
 8 /**
 9  上下左右AB-方法
10  */
11 - (void)up;
12 - (void)down;
13 - (void)left;
14 - (void)right;
15 - (void)commandA;
16 - (void)commandB;
17
18 @end

BaseControl.m

 1 #import "BaseControl.h"
 2
 3 @implementation BaseControl
 4
 5 - (void)up {
 6
 7     [self.gameSystem loadComand:kUp];
 8 }
 9
10 - (void)down {
11
12     [self.gameSystem loadComand:kDown];
13 }
14
15 - (void)left {
16
17     [self.gameSystem loadComand:kLeft];
18 }
19
20 - (void)right {
21
22     [self.gameSystem loadComand:kRight];
23 }
24
25 - (void)commandA {
26
27     [self.gameSystem loadComand:kA];
28 }
29
30 - (void)commandB {
31
32     [self.gameSystem loadComand:kB];
33 }
34
35 @end

BaseGameSystem.h

 1 #import <Foundation/Foundation.h>
 2
 3 typedef enum : NSUInteger {
 4
 5     kUp = 0x1,
 6     kDown,
 7     kLeft,
 8     kRight,
 9     kA,
10     kB,
11
12     kO,
13     kX
14
15 } EcomandType;
16
17 @interface BaseGameSystem : NSObject
18
19 /**
20  加载指令
21
22  @param type 指令代码
23  */
24 - (void)loadComand:(EcomandType) type;
25
26 @end

BaseGameSystem.m

1 #import "BaseGameSystem.h"
2
3 @implementation BaseGameSystem
4
5 - (void)loadComand:(EcomandType)type {
6
7 }
8
9 @end

这样两个抽象类就耦合了, 现在我们创建实例

XBoxGameSystem.h

1 #import "BaseGameSystem.h"
2
3 @interface XBoxGameSystem : BaseGameSystem
4
5 @end

XboxGameSystem.m

 1 #import "XBoxGameSystem.h"
 2
 3 @implementation XBoxGameSystem
 4
 5 - (void)loadComand:(EcomandType)type {
 6
 7     switch (type) {
 8         case kUp:
 9             NSLog(@"UP");
10             break;
11
12         case kDown:
13             NSLog(@"Down");
14             break;
15
16         case kRight:
17             NSLog(@"Right");
18             break;
19
20         case kLeft:
21             NSLog(@"Left");
22             break;
23
24         case kA:
25             NSLog(@"kA");
26             break;
27
28         case kB:
29             NSLog(@"kB");
30             break;
31
32         default:
33             NSLog(@"None");
34             break;
35     }
36 }
37 @end

XBoxController.h

1 #import "BaseControl.h"
2
3 @interface XBoxController : BaseControl
4
5 @end

XBoxController.m

1 #import "XBoxController.h"
2
3 @implementation XBoxController
4
5 @end

下面是Controller中使用

 1 #import "ViewController.h"
 2 #import "BaseControl.h"
 3 #import "XBoxGameSystem.h"
 4 #import "XBoxController.h"
 5
 6 @interface ViewController ()
 7
 8 @end
 9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13
14     [super viewDidLoad];
15
16     BaseControl *controller = [[XBoxController alloc] init];
17     controller.gameSystem = [[XBoxGameSystem alloc] init];
18
19     [controller up];
20
21 }
22
23
24
25 @end
时间: 2024-08-05 11:10:58

Objective-C 桥接模式 -- 简单实用和说明的相关文章

第9章 结构型模式—桥接模式

1. 桥接模式(Bridge Pattern)的定义 (1)将抽象部分与它的实现部分分离,使它们都可以独立地变化 ①一般的“抽象”与“实现”是指父子类的继承关系.但这里,GoF所谓的“抽象”是如果引起一个类变化是多维度的因素(设为2维),就将其他变化因素抽象成一个接口,在“Abstraction类”中只留这个接口,然后通过对象组合(而不是继承)的方式去依赖这个接口.而“实现”是指在让另一个“Implementor类”的子类去实现接口(第2维度的变化). ② “Abstraction类”和“Imp

深入理解JavaScript系列(44):设计模式之桥接模式

介绍 桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化. 正文 桥接模式最常用在事件监控上,先看一段代码: addEvent(element, 'click', getBeerById); function getBeerById(e) { var id = this.id; asyncRequest('GET', 'beer.uri?id=' + id, function(resp) { // Callback response. console.log('Requ

5分钟读书笔记之 - 设计模式 - 桥接模式

补充一点知识: 私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问.私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用.特权方法 通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用.可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数.公共属性 通过thi

浅说解决VMware桥接模式连接主机

内容概要: 1: 搞懂VMware的桥接,NAT,HostOnly三种模式的意义. 2: 分别示范,CentOS 6,CentOS 7的手动分配固定虚拟机的IP地址. 3: 使用桥接方法ping通主机,并用Xshell远程控制. 解决的问题: 1: 虚拟机上不了网. 2: 无法ping通主机或远程连接. 3: 网卡启动总是失败,报错. 写作目的: 初装linux后,我们会习惯性的ping一下主机,看看虚拟机是否和主机连接正常,若正常便会迫不及待的用Xshell远程连接虚拟机,进行验证并操作.可安

Java设计模式:桥接模式

问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何来描述这些功能呢?或许一般会与下面代码相似. public class A1 { void F1(){} void F2(){} } public class A2 { void F1(){} void F2(){} } 很明显,若有m个事物,n个功能,按照这个方法,一共要写m个类,功能方法累积起来

桥接模式

一.目录概要 二.场景问题 假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决?我们初学者最容易想到的办法就是利用继承的方式,那利用继承实现的类图又是什么样子呢?我们看图. 代码展示 package com.aaron.bridge; public interface Computer { public void sale(); } class Desktop implements Computer{ @Override public void sale(

23种设计模式--桥接模式

一.桥接模式的介绍 桥接其实说白就是走近路嘛,来个简单例子来说班级要到B地区去旅游,但是不是集体组织去,自己去到B地就可以了,这样就会诞生三种出行方式,那就是水,路,空,桥接的意思就是将水,路,空这三个地方建立一个港口,那样大家到B地区的中转战始终就是一个,大概的意思就是这,虽然有点不恰当,但是我感觉这样一说大家会比较明朗一点:不行就再来一个例子,存钱的例子来说吧,众所周知的,中国有四大行(工,农,中,建),你选择去某家存钱,存钱的方式有三种(活期,定期),但是银行不止这几家杭州银行等等本地新兴

Javascript设计模式理论与实战:桥接模式

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 基本理论 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.桥接模式主要有4个角色组成:(1)抽象类(2)扩充抽象类(3)实现类接口(4)具体实现类根据javascript语言的特点,我们将其简化成2个角色:(1)扩充抽象类(2)具体实现类怎么去理解桥接模式呢?我们接下来举例说明 桥接模式的实现 理解桥

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向