代理模式
2015-10-24 00:18
471 查看
定义
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.
使用场景
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表.这样可以隐藏一个对象存在于不同地址空间的事实.
2.虚拟代理,是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象.
3.安全代理,用来控制真实对象访问的权限.
4.智能指引,是指当调用真实的对象时,代理处理另外一些事.
实现代码
// SchoolGirl.h
#import <Foundation/Foundation.h>
@interface SchoolGirl :
NSObject
@property (nonatomic,copy)
NSString *name;
@end
// SchoolGirl.m
#import "SchoolGirl.h"
@implementation SchoolGirl
@end
// Pursuit.h
#import "GiveGift.h"
@class SchoolGirl;
@interface Pursuit : GiveGift
@property (nonatomic,copy) SchoolGirl *girl;
@end
// Pursuit.m
#import "Pursuit.h"
#import "SchoolGirl.h"
@implementation Pursuit
-(void)giveDolls:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你洋娃娃",schoolGirl.name);
}
-(void)giveFlowers:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你花",schoolGirl.name);
}
-(void)giveChocolate:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你巧克力",schoolGirl.name);
}
@end
// GiveGift.h
#import <Foundation/Foundation.h>
@class SchoolGirl;
@interface GiveGift :
NSObject
-(void)giveDolls:(SchoolGirl *)schoolGirl;
-(void)giveFlowers:(SchoolGirl *)schoolGirl;
-(void)giveChocolate:(SchoolGirl *)schoolGirl;
@end
// GiveGift.m
#import "GiveGift.h"
@implementation GiveGift
@end
// Proxy.h
#import "GiveGift.h"
@class Pursuit;
@interface Proxy :
GiveGift
@property (nonatomic,copy)
Pursuit *pursuit;
@end
// Proxy.m
#import "Proxy.h"
#import "Pursuit.h"
#import "SchoolGirl.h"
@implementation Proxy
-(void)giveDolls:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveDolls:schoolGirl];
}
-(void)giveFlowers:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveFlowers:schoolGirl];
}
-(void)giveChocolate:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveChocolate:schoolGirl];
}
@end
// main.m
// 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.
#import <Foundation/Foundation.h>
#import "SchoolGirl.h"
#import "Proxy.h"
int main(int argc,const
char * argv[]) {
@autoreleasepool {
SchoolGirl *jiaojiao = [[SchoolGirlalloc]
init];
jiaojiao.name =@"jiaojiao";
Proxy *proxy = [[Proxyalloc]
init];
[proxy giveDolls:jiaojiao];
[proxy giveFlowers:jiaojiao];
[proxy giveChocolate:jiaojiao];
}
return0;
}
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.
使用场景
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表.这样可以隐藏一个对象存在于不同地址空间的事实.
2.虚拟代理,是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象.
3.安全代理,用来控制真实对象访问的权限.
4.智能指引,是指当调用真实的对象时,代理处理另外一些事.
实现代码
// SchoolGirl.h
#import <Foundation/Foundation.h>
@interface SchoolGirl :
NSObject
@property (nonatomic,copy)
NSString *name;
@end
// SchoolGirl.m
#import "SchoolGirl.h"
@implementation SchoolGirl
@end
// Pursuit.h
#import "GiveGift.h"
@class SchoolGirl;
@interface Pursuit : GiveGift
@property (nonatomic,copy) SchoolGirl *girl;
@end
// Pursuit.m
#import "Pursuit.h"
#import "SchoolGirl.h"
@implementation Pursuit
-(void)giveDolls:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你洋娃娃",schoolGirl.name);
}
-(void)giveFlowers:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你花",schoolGirl.name);
}
-(void)giveChocolate:(SchoolGirl *)schoolGirl
{
NSLog(@"%@送你巧克力",schoolGirl.name);
}
@end
// GiveGift.h
#import <Foundation/Foundation.h>
@class SchoolGirl;
@interface GiveGift :
NSObject
-(void)giveDolls:(SchoolGirl *)schoolGirl;
-(void)giveFlowers:(SchoolGirl *)schoolGirl;
-(void)giveChocolate:(SchoolGirl *)schoolGirl;
@end
// GiveGift.m
#import "GiveGift.h"
@implementation GiveGift
@end
// Proxy.h
#import "GiveGift.h"
@class Pursuit;
@interface Proxy :
GiveGift
@property (nonatomic,copy)
Pursuit *pursuit;
@end
// Proxy.m
#import "Proxy.h"
#import "Pursuit.h"
#import "SchoolGirl.h"
@implementation Proxy
-(void)giveDolls:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveDolls:schoolGirl];
}
-(void)giveFlowers:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveFlowers:schoolGirl];
}
-(void)giveChocolate:(SchoolGirl *)schoolGirl
{
Pursuit *pursuit = [[Pursuitalloc]
init];
[pursuit giveChocolate:schoolGirl];
}
@end
// main.m
// 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.
#import <Foundation/Foundation.h>
#import "SchoolGirl.h"
#import "Proxy.h"
int main(int argc,const
char * argv[]) {
@autoreleasepool {
SchoolGirl *jiaojiao = [[SchoolGirlalloc]
init];
jiaojiao.name =@"jiaojiao";
Proxy *proxy = [[Proxyalloc]
init];
[proxy giveDolls:jiaojiao];
[proxy giveFlowers:jiaojiao];
[proxy giveChocolate:jiaojiao];
}
return0;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 七、设计模式——装饰模式
- 设计模式总结
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 设计模式之创建型模式
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- 浅谈设计模式的学习
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则