OC循环渐进:代理设计模式

在设计模式中,代理设计模式作为经常用到的一种开发模式,所以掌握代理设计对于每一个程序员来说尤其重要。
那么什么是代理设计模式呢,直白点来说,就是你拜托别人去帮你办一件事情,这就是一个代理模式,那个帮助你的人就是你的代理者。
如何设计一个代理模式呢?主要分为以下3步:
1.注册代理者
2.代理者实现协议
3.调用代理方法
以下是一个代理设计的实际案例:班长代替公司罚款
1.建立一个教师类:
Teacher.h 文件代码如下:

#import <Foundation/Foundation.h>

@interface Teacher : NSObject

@property (nonatomic,assign) BOOL isLate;

@end

Teacher.m 文件代码如下:

#import "Teacher.h"

@implementation Teacher

@end

2.建立一个学生类:
Student.h 文件代码如下:

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property (nonatomic,assign) BOOL isLate;

@end

Student.m 文件代码如下:

#import "Student.h"

@implementation Student

@end

3.建立一个公司类:
Company.h 文件代码如下:

#import <Foundation/Foundation.h>
@class Student;
@class Teacher;

@protocol CompanyDelegate <NSObject>

@required
- (void)studentisLate:(int)money;
- (void)teacherisLate:(int)money;
@optional
- (void)sayHi:(id)type;

@end

@interface Company : NSObject

@property (nonatomic,weak) id<CompanyDelegate> delegate;
@property (nonatomic,strong) Teacher *teacher;
@property (nonatomic,strong) Student *student;

- (void)perforProtocol;

@end

Companyt.m 文件代码如下:

#import "Company.h"
#import "Teacher.h"
#import "Student.h"

@implementation Company

- (void)perforProtocol {
    if (self.teacher.isLate) {
        if (self.delegate && [self.delegate conformsToProtocol:@protocol(CompanyDelegate)]) {
            [self.delegate teacherisLate:50];
        }
    }else {
        if ([self.delegate respondsToSelector:@selector(sayHi:)]) {
            [self.delegate sayHi:self.teacher];
        }
    }

    if (self.student.isLate) {
        if ([self.delegate respondsToSelector:@selector(studentisLate:)]) {
            [self.delegate studentisLate:10];
        }
    }else {
        if ([self.delegate respondsToSelector:@selector(sayHi:)]) {
            [self.delegate sayHi:self.student];
        }
    }
}



@end

4.建立一个班长类:
Monitor.h 文件代码如下:

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

@interface Monitor : NSObject <CompanyDelegate>

@end

Monitor.m 文件代码如下:

#import "Monitor.h"
#import "Student.h"
#import "Teacher.h"

@implementation Monitor

- (void)studentisLate:(int)money {
    NSLog(@"学生迟到了,罚款 %d ¥",money);
}

- (void)teacherisLate:(int)money {
    NSLog(@"教师迟到了,罚款 %d ¥",money);
}

- (void)sayHi:(id)type {
    if ([type isMemberOfClass:Student.class]) {
        NSLog(@"student isn't late!");
    }
    if ([type isMemberOfClass:Teacher.class]) {
        NSLog(@"teacher isn't late!");
    }
}

@end

main.m 的文件代码如下:

#import <Foundation/Foundation.h>
#import "Teacher.h"
#import "Student.h"
#import "Company.h"
#import "Monitor.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Company *company = [Company new];
        Student *student = [Student new];
        Teacher *teacher = [Teacher new];
        Monitor *monitor = [Monitor new];

        company.delegate = monitor;
        company.teacher = teacher;
        company.student = student;

        company.student.isLate = YES;
        teacher.isLate = NO;

        [company perforProtocol];

        NSLog(@"结束标记");

    }
    return 0;
}

测试结果如下:

2015-08-08 16:19:35.383 DelegateDemo03[1063:81474] teacher isn't late!
2015-08-08 16:19:35.416 DelegateDemo03[1063:81474] 学生迟到了,罚款 10 ¥
2015-08-08 16:19:35.417 DelegateDemo03[1063:81474] 结束标记

以上就是一个代理设计模式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值