结构型之六-代理模式

Proxy(代理模式)

为其他对象提供一种代理以控制对这个对象的访问。
UITableView的delegate和dataSource,都是通过代理对象来控制对UITableView的访问。

VC.m

HCDschoolGirl *girl = [[HCDschoolGirl alloc]init];
girl.name = @"哈哈哈哈哈";
HCDproxy *proxy = [[HCDproxy alloc]initWithSchoolGirl:girl];
[proxy giveFlowers];
[proxy giveDolls];
[proxy giveChocolate];

HCDgiveGift.h // 方法列表

@protocol HCDgiveGift <NSObject>
///  送洋娃娃
- (void)giveDolls;
///  送鲜花
- (void)giveFlowers;
///  送巧克力
- (void)giveChocolate;
@end

HCDproxy.h // 代理类

@interface HCDproxy : NSObject<HCDgiveGift>
-(instancetype)initWithSchoolGirl:(HCDschoolGirl *)schoolGirl;
@end

HCDproxy.m

@interface HCDproxy ()
@property (strong, nonatomic) HCDpursuit *pursuit;
@end
@implementation HCDproxy
- (instancetype)initWithSchoolGirl:(HCDschoolGirl *)schoolGirl {
    self = [super init];
    if (self) {
        self.pursuit = [[HCDpursuit alloc] initWithSchoolGirl:schoolGirl];
    }
    return self;
}
- (void)giveDolls {
    [self.pursuit giveDolls];
}
- (void)giveFlowers {
    [self.pursuit giveFlowers];
}
- (void)giveChocolate {
    [self.pursuit giveChocolate];
}
@end

HCDpursuit.h // 实现类

@interface HCDpursuit : NSObject<HCDgiveGift>
-(instancetype)initWithSchoolGirl:(HCDschoolGirl *)schoolGirl;
@end

HCDpursuit.m

@interface HCDpursuit ()
@property(nonatomic,strong)HCDschoolGirl *schoolGirl;
@end
@implementation HCDpursuit
-(instancetype)initWithSchoolGirl:(HCDschoolGirl *)schoolGirl{
    self = [super init];
    if (self) {
        _schoolGirl = schoolGirl;
    }
    return self;
}
-(void)giveChocolate{
    NSLog(@"送你巧克力%@",self.schoolGirl.name);
}
-(void)giveDolls{
    NSLog(@"送你洋娃娃%@",self.schoolGirl.name);
}
-(void)giveFlowers{
    NSLog(@"送你玫瑰花%@",self.schoolGirl.name);
}
@end

设计图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 何为代理模式 代理模式的几种形式: (1)远程代理(remote proxy):为位于不同地址空间或网络上的...
    LeeLeCoder阅读 3,704评论 0 0
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,673评论 1 23
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,347评论 1 14
  • 成长,不是指年龄的增加,而是人生境界、格局、视野的提升和扩大。 年幼时,成长意味着增加。 年过三十,成长以为着放弃...
    有风有光阅读 3,613评论 0 1
  • 年轻时的思念是一杯春酒,浅薄的忧伤滋润着万变之爱; 中年时的思念是一瓶陈酒,窖藏了日月更替的满腹心事; 年老时的思...
    同_昕阅读 3,680评论 1 7

友情链接更多精彩内容