美文网首页iOS基础学习
Objective-C基础学习之代理设计模式

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

作者: WenJim | 来源:发表于2017-10-20 23:32 被阅读9次

1.设计模式

  • 什么是设计模式

    • 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
  • 什么是代理设计模式

    • 生活中大家一定遇到这样的情况了:比如说我要买一包纸,不妨就是心相印的吧,那一般人的话我应该不是去心相印的工厂里面直接去买吧,而是我们在心相印专卖店或者什么超市啊,这些地方购买,这些地方实际上就是洁丽雅毛巾的代理。这其实和我们OO中的代理模式是很相似的。
  • 代理设计模式的场合:

    • 当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)
    • 对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)
    • 当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)

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

相关文章

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

    1.设计模式 什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的...

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • 设计模式学习之代理模式

    代理模式指的是通过代理对象访问目标对象。这样做的好处是可以在目标基础上实现更多的功能。比如维护的时候不好改别人的代...

  • 设计模式学习之代理模式

    代理的实质就是代理类保存着实际目标类的引用对象。代理分为静态代理和动态代理 静态代理 定义一个目标类接口,并定义两...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • JDK动态代理源码学习

    继上一篇博客设计模式之代理模式学习之后http://blog.csdn.net/u014427391/articl...

  • Android中的设计模式之代理模式

    参考 《设计模式:可复用面向对象软件的基础 》4.7 Proxy 代理--对象结构型模式 《Android源码设计...

网友评论

    本文标题:Objective-C基础学习之代理设计模式

    本文链接:https://www.haomeiwen.com/subject/ofaxuxtx.html