你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 實例講授若何在iOS運用開辟中應用設計形式中的署理形式

實例講授若何在iOS運用開辟中應用設計形式中的署理形式

編輯:IOS開發綜合

署理形式是OC中一種罕見的設計形式,那末甚麼是署理形式呢?舉個栗子,假定你是一個日發貨量過萬的淘寶賣家(A),然則天天的派件弗成能你自己或許讓你的員工去派件,是以你宣布了一條信息(B),下面注明各類請求,各年夜快遞公司看到有那末年夜的好處紛纭上門溝通,最初你選擇了一件快遞公司(C)。那末在下面的例子中,我們等於拜托人,宣布的信息即協定(protocol),下面劃定了派件人須要完成的事,而最初選擇的快遞公司也就是署理人(delegate),署理我們去派件。

類圖:

201632193549743.png (584×246)

依據以上類圖,可以曉得在署理形式中的腳色有以下三種:

1.籠統對象腳色:聲清楚明了目的對象和署理對象的配合接口,如許一來在任何可使用目的對象的處所都可使用署理對象。

2.目的對象腳色:界說了署理對象所代表的目的對象。

3.署理對象腳色:署理對象外部含有目的對象的援用,從而可以在任什麼時候候操作目的對象;署理對象供給一個與目的對象雷同的接口,以即可以在任什麼時候候替換目的對象。署理對象平日在客戶端挪用傳遞給目的對象之前或以後,履行某個操作,而不是純真地將挪用傳遞給目的對象。

分類:

1.長途署理(Remote Proxy):為分歧地輿的對象供給局域網代表對象
2.虛擬署理(Virtual Proxy):依據須要將資本消費很年夜的對象停止延遲,真正須要的時刻再創立
3.掩護署理(Protect Proxy):掌握用戶的拜訪權限
4.智能援用署理(Smart Reference Proxy):供給對目的對象額定的辦事
在應用署理形式的時刻,九成以上應用到的都是智能援用署理。

經常使用署理形式道理
署理形式完成的兩種方法:
1.靜態署理:
署理和被署理對象在署理之前都是肯定的。他們都完成雷同的接口或許繼續雷同的籠統類。
2.靜態署理:
所謂Dynamic Proxy是在運轉時生成的一種class,該class須要完成一組interface,應用靜態署理類時,必需完成InvocationHandle接口。


實例剖析
界說一個寄件人(Sender)類
Sender.h

#import <Foundation/Foundation.h>

// ① 聲明協定,想要成為署理方要完成協定中劃定的內容
@protocol SenderDelegate

// 必需完成的協定,若沒有完成會報錯,默許是必需完成的
@required
- (void)sendCargo;// 完成送貨

// 可以選擇完成的協定
@optional
- (void)senderArriveIn24;// 24 小時內投遞

@end


@interface Sender : NSObject

// ② 界說一個遵照協定的變量 delegate,即聲明一個署理人
@property (nonatomic, assign) id<SenderDelegate> delegate;

- (void)startDelegate;// 履行協定辦法
@end

Sender.m

#import "Sender.h"

@implementation Sender

- (void)startDelegate
{   // 完成署理人要完成的義務
    [self.delegate sendCargo];
}

@end

界說派件人(Delivery)類
Delivery.h

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

@interface Delivery : NSObject <SenderDelegate> // ③ 署理人遵照協定

- (void)becomeDelegateFrom:(Sender *)sender;// 成為誰的署理

@end

Delivery.m

#import "Delivery.h"

@implementation Delivery

-(void)becomeDelegateFrom:(Sender *)sender
{
    NSLog(@"%s 我要成為署理人",__func__);
    sender.delegate = self; // 使 delivery 本身成為 sender 的署理
}

// ④ 完成署理人必需遵照的協定
-(void)sendCargo
{
    NSLog(@"%s Mission Complete",__func__);
}

@end

測試類

#import "ViewController.h"
#import "Sender.h"
#import "Delivery.h"


@interface ViewController ()

@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    Sender *sender = [[Sender alloc]init];  // 創立拜托人 Sender
    Delivery *delivery = [[Delivery alloc]init];// 創立署理人 Delivery

    [delivery becomeDelegateFrom:sender];// ⑤ 使 delivery 成為署理人

    [sender startDelegate];// ⑥ 履行協定辦法

}


@end

運轉成果

2016-01-10 17:37:52.206 署理演習[31645:3962006] -[Delivery becomeDelegateFrom:] 我要成為署理人
2016-01-10 17:37:52.206 署理演習[31645:3962006] -[Delivery sendCargo] Mission Complete

【實例講授若何在iOS運用開辟中應用設計形式中的署理形式】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved