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
發佈了488 篇原創文章 · 獲贊 22 · 訪問量 115萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章