前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Objective-C 桥接模式 -- 简单实用和说明

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

作者头像
周希
发布2019-10-15 01:11:17
3880
发布2019-10-15 01:11:17
举报
文章被收录于专栏:APP自动化测试

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

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

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

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

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

BaseControl.h

代码语言:javascript
复制
 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

代码语言:javascript
复制
 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

代码语言:javascript
复制
 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

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

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

XBoxGameSystem.h

代码语言:javascript
复制
1 #import "BaseGameSystem.h"
2 
3 @interface XBoxGameSystem : BaseGameSystem
4 
5 @end

XboxGameSystem.m

代码语言:javascript
复制
 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

代码语言:javascript
复制
1 #import "BaseControl.h"
2 
3 @interface XBoxController : BaseControl
4 
5 @end

XBoxController.m

代码语言:javascript
复制
1 #import "XBoxController.h"
2 
3 @implementation XBoxController
4 
5 @end

下面是Controller中使用

代码语言:javascript
复制
 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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档