iOS设计模式--桥接

学习设计模式推荐看OBJECTIVE - C设计模式。

何时使用桥接模式

1、不想在抽象与其实现之间形成固定的绑定关系(这样就在运行时切换实现) 

2、抽象及其实现都应可以通过子类化独立进行扩展;

3、对抽象的实现进行修改不应影响客户端代码

4、如果每个实现需要额外的子类以细化抽象,则说明有必要把它们分成两个部分

5、想在带有不同抽象接口的多个对象之间共享一个实现


下面用代码说说这个设计模式

先展示下调用的代码

//
//  ViewController.m
//  BridgeTest
//
//  Created by qitmac000246 on 15/7/13.
//  Copyright (c) 2015年 杜甲. All rights reserved.
//

#import "ViewController.h"
#import "TouchConsoleController.h"
#import "GameBoyEmulator.h"


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 子功能实现
    GameBoyEmulator *gbe = [[GameBoyEmulator alloc] init];
    // 功能模块调用
    TouchConsoleController *tcc = [[TouchConsoleController alloc] init];
    [tcc setEmulator:gbe];// 指定功能对象
    [tcc setCommand:kConsoleUp];// 实现
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

ConsoleEmulator.h

//
//  ConsoleEmulator.h
//  BridgeTest
//
//  Created by qitmac000246 on 15/7/14.
//  Copyright (c) 2015年 杜甲. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum
{
    kConsoleUp,
}ConsoleType;

// 执行类的抽象父类
@interface ConsoleEmulator : NSObject

// 抽象的公用方法
- (void) loadInstructionsForCommand;


@end

ConsoleEmulator.m

#import "ConsoleEmulator.h"

@implementation ConsoleEmulator

- (void) loadInstructionsForCommand
{
    
    
}
@end
GameBoyEmulator.h

#import "ConsoleEmulator.h"


@interface GameBoyEmulator : ConsoleEmulator



@end

GameBoyEmulator.m

#import "GameBoyEmulator.h"

@implementation GameBoyEmulator

// 子执行类
- (void) loadInstructionsForCommand
{
    NSLog(@"%s",__func__);
}
@end

ConsoleController.h

#import <Foundation/Foundation.h>
#import "ConsoleEmulator.h"

@interface ConsoleController : NSObject

// 控制器的父类中定义 执行类的抽象父类
@property (nonatomic , strong) ConsoleEmulator *emulator;

// 抽象的公用调用方法
- (void) setCommand:(ConsoleType)command;


@end

ConsoleController.m

#import "ConsoleController.h"

@implementation ConsoleController

- (void) setCommand:(ConsoleType)command
{
    [_emulator loadInstructionsForCommand];
}
@end

TouchConsoleController.h

#import "ConsoleController.h"
// 控制器子类
@interface TouchConsoleController : ConsoleController

- (void) up;

@end

TouchConsoleController.m

#import "TouchConsoleController.h"

@implementation TouchConsoleController

- (void) up
{
    [super setCommand:kConsoleUp];
}
@end


代码下载:http://pan.baidu.com/s/1hqo2ka4
发布了490 篇原创文章 · 获赞 22 · 访问量 115万+

猜你喜欢

转载自blog.csdn.net/qqMCY/article/details/46881699