iOS基础学习

Objective-C基础学习之代理设计模式

2017-10-20  本文已影响9人  WenJim

1.设计模式

2.代理设计模式示例

// 协议
#import <Foundation/Foundation.h>
@class Baby;

@protocol BabyProtocol <NSObject>
- (void)feedWithBaby:(Baby *)baby;
- (void)hypnosisWithBaby:(Baby *)baby;
@end
#import "BabyProtocol.h"
@interface Baby : NSObject
// 食量
@property (nonatomic, assign) int food;
// 睡意
@property (nonatomic, assign) int drowsiness;
// 饿
- (void)hungry;
// 睡意
- (void)sleepy;
@property (nonatomic, strong) id<BabyProtocol> nanny;
@end

@implementation Baby

- (void)hungry
{
    self.food -= 5;
    NSLog(@"婴儿饿了");
    // 通知保姆
    if ([self.nanny respondsToSelector:@selector(feedWithBaby:)]) {
        [self.nanny feedWithBaby:self];
    }
}

- (void)sleepy
{
    self.drowsiness += 5;
    NSLog(@"婴儿困了");
    // 通知保姆
    if ([self.nanny respondsToSelector:@selector(hypnosisWithBaby:)]) {
        [self.nanny hypnosisWithBaby:self];
    }
}
@end
// 保姆
@interface Nanny : NSObject <BabyProtocol>
@end

@implementation Nanny

- (void)feedWithBaby:(Baby *)baby
{
    baby.food += 10;
    NSLog(@"给婴儿喂奶, 现在的食量是%i", baby.food);
}

- (void)hypnosisWithBaby:(Baby *)baby
{
    baby.drowsiness += 10;
    NSLog(@"哄婴儿睡觉, 现在的睡意是%i", baby.drowsiness);
}
@end

3.代理设计模式练习

// 协议
//  LookingHouseProtocol.h

#import <Foundation/Foundation.h>


@class Student;
@protocol LookingHouseProtocol <NSObject>

// 有阳光的房子
-(void)sunRoom:(Student *)student;
// 设备齐全
-(void)completeRoom:(Student *)student;
// 大房子
-(void)largeRoom:(Student *)student;

@end
// 学生.h
//  Student.h

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

@interface Student : NSObject

-(void)lookingHouse;

@property (nonatomic,strong) id<LookingHouseProtocol> intermediary;

@end
// 学生.m
//  Student.m

#import "Student.h"

@implementation Student


-(void)lookingHouse
{
    if ([self.intermediary respondsToSelector:@selector(sunRoom:)]) {
        [self.intermediary sunRoom:self];
        
    }
    
    if ([self.intermediary respondsToSelector:@selector(completeRoom:)]) {
        [self.intermediary completeRoom:self];
        
    }
    
    if ([self.intermediary respondsToSelector:@selector(largeRoom:)]) {
        [self.intermediary largeRoom:self];
    }
}

@end
// 中介.h
//  Intermediary.h

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

@interface Intermediary : NSObject<LookingHouseProtocol>

@end
// 中介.m 
//  Intermediary.m

#import "Intermediary.h"

@implementation Intermediary

-(void)sunRoom:(Student *)student
{
    
    NSLog(@"%s",__func__);
}

- (void)completeRoom:(Student *)student
{
    NSLog(@"%s",__func__);
}

- (void)largeRoom:(Student *)student
{
    NSLog(@"%s",__func__);
}

@end

上一篇 下一篇

猜你喜欢

热点阅读