码迷,mamicode.com
首页 > 其他好文 > 详细

用代理实现多态的例子

时间:2015-09-08 09:28:02      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

/*

代理:.......................................................................................

【委托方】主动方 持有带协议的id指针,可以使用协议。 

【代理方】被动方 遵从协议,实现方法。 

代理:.......................................................................................

*/

//main.m

#import <Foundation/Foundation.h>

#import "Computer.h"

#import "USBMouse.h"

#import "USBFan.h"

#import "USBDisk.h"

int main(int argc, const char * argv[]) {

    //创建出一台电脑

    Computer *computer=[[Computer alloc] init];

    //向电脑的USB接口中插入不同的USB设备

    //USBDisk *udisk=[[USBDisk alloc] init];

    //USBMouse *umouse=[[USBMouse alloc] init];

    USBFan *ufan=[[USBFan alloc] init];

    computer.delegate=ufan;

    //USB设备就开始工作了

    [computer doWork];

    return 0;

}

 //UsbProtocol.h

/*

 USB接口的协议

 只要遵从这个协议,该设备就可以插入到电脑上的USB接口上进行工作

 */

#import <Foundation/Foundation.h>

@protocol UsbProtocol <NSObject>

//运行的方法

- (void)execute;

@end

 //USBDisk.h

//U盘

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBDisk : NSObject<UsbProtocol>

@end

 //USBDisk.m

#import "USBDisk.h"

@implementation USBDisk

- (void)execute

{

    NSLog(@"进行数据的存储");

}

@end

 //USBMouse.h

//USB鼠标

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBMouse : NSObject<UsbProtocol>

@end

//USBMouse.m 

#import "USBMouse.h"

@implementation USBMouse

- (void)execute

{

    NSLog(@"开始操作电脑");

}

@end

 //USBFan.h

//USB风扇

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBFan : NSObject<UsbProtocol>

@end

 //USBFan.m

#import "USBFan.h"

@implementation USBFan

- (void)execute

{

    NSLog(@"开始送风");

}

@end

 //Computer.h

//电脑

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface Computer : NSObject

//相当于有一个USB接口,可以插入不同的USB设备

//持有协议的id指针属性

@property (weak) id<UsbProtocol> delegate;

//USB工作的方法

-(void) doWork;

@end

 //Computer.m

#import "Computer.h"

@implementation Computer

- (void)doWork

{

    [self.delegate execute];

}

@end

 //2015-09-08 08:32:56.186 demo4[892:38137] 开始送风

用代理实现多态的例子

标签:

原文地址:http://www.cnblogs.com/wanghengheng/p/4790528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!