代理模式

简介:

定义

代理模式(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 = [[Pursuit alloc] init];

    [pursuit giveDolls:schoolGirl];

}

-(void)giveFlowers:(SchoolGirl *)schoolGirl

{

    Pursuit *pursuit = [[Pursuit alloc] init];

    [pursuit giveFlowers:schoolGirl];

}

-(void)giveChocolate:(SchoolGirl *)schoolGirl

{

    Pursuit *pursuit = [[Pursuit alloc] 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 = [[SchoolGirl alloc] init];

        jiaojiao.name = @"jiaojiao";

        

        Proxy *proxy = [[Proxy alloc] init];

        

        [proxy giveDolls:jiaojiao];

        [proxy giveFlowers:jiaojiao];

        [proxy giveChocolate:jiaojiao];

    }

    return 0;

}

目录
相关文章
|
5月前
|
设计模式 缓存 Java
适配器模式与代理模式的区别
【8月更文挑战第22天】
266 0
|
6月前
|
设计模式
对于装饰器模式与代理模式的个人理解
摘要: 代理模式与装饰器模式虽相似,但目的不同。装饰器动态增强对象功能,如添加新特性,而不改变原有类。代理模式则用于控制访问,如优化昂贵操作或添加辅助服务(如日志),它可能在内部初始化原对象。用法上,装饰器由外部决定是否应用,允许链式创建,而代理通常内部调用,外部直接与代理交互,被代理对象可能独立不可用。
|
8月前
|
缓存 数据安全/隐私保护 C++
【C++】—— 代理模式
【C++】—— 代理模式
代理模式——为他人做嫁衣裳
代理模式——为他人做嫁衣裳
|
8月前
|
Java Spring
代理模式
代理模式
59 0
|
Java 网络安全 Maven
代理模式的运用
代理模式的运用
69 0
|
设计模式 JavaScript
关于代理模式我所知道的
关于代理模式我所知道的
90 0
|
Java Spring
代理模式你了解多少
代理模式你了解多少
84 0
|
设计模式 缓存 监控
我学会了,代理模式
代理模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
102 0
我学会了,代理模式
|
存储 设计模式 缓存
万洋-什么是代理模式
简介: 影视导演找演员谈合作一般是不会直接找到演员本人,而是先找到演员的经纪人,先由经纪人洽谈,经纪人觉得合适的话就会与演员本人商讨合作事项,这个过程导演与演员是不直接接触的。 这里就用到了**代理模式**,导演其实想找的人是演员,但是要先找到是经纪人,再由经纪人找演员沟通。真正的价值在于演员,但是这个过程中,对于导演来说,经纪人与演员体现出了同样的价值,经纪人会全权代理演员与导演洽谈,经纪人会用自己的专业性过滤掉一些不好的合作意向,从而避免演员被频繁打扰。
134 0
万洋-什么是代理模式