学习设计模式推荐看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