代理设计模式

写在前面

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。当然设计模式和语言没有关系,它是一种编程思想。本篇将介绍代理设计模式的实现,以OC语言为例。

详细内容

对代理设计模式的理解

  • 在OC中,代理也称为委托。意思是自己不能完成或不愿意完成的事情,让别人去做。比如,你需要去买一设计模式的书,但是自己不方便,这是你想到了你的朋友小明,请他去。这就体现了代理的思想。
  • 在上面的例子中有重要的概念需要区分
    • 代理类(委托方):提出需求的一方 – 你
    • 实体类(代理方):可以完成委托方提出的需求的一方 - 小明
    • 传递的参数:钱
    • 结果:你获取的书

代理设计模式的UML类图关系

通过一个UML图形理解代理。
这里写图片描述

小例子

这里通过一个自定义控件,内部封装了一个UIButton,使用代理方式响应按钮的点击。
- 定义协议,完成双方的约束

@class GYProxyView;
/**
 *  协议规范了代理类和实体类的相关要求
 */
@protocol GYProxyViewDelegate <NSObject>
@optional
-(void)proxyView:(GYProxyView *)proxyView didClickLoginBtn:(UIButton *)btn;
@end
  • 代理类,若引用实体类对象,向实体类对象提出需求
@protocol GYProxyViewDelegate;
@interface GYProxyView : UIView
/** 视图的代理,这样需要为若引用*/
@property (nonatomic, weak) id<GYProxyViewDelegate> delegate;
@end
  • 实体类,遵守协议,提供需求
    完整代码请到这里
-(void)proxyView:(GYProxyView *)proxyView didClickLoginBtn:(UIButton *)btn
{
    NSLog(@"%s", __func__);
}
  • 代理的内存分析
    在示例代码中,我们使用weak修饰了代理属性,这是避免循环引用的一种方式。若使用strong,则会造成循环引用。看看下图这里写图片描述
    使用weak后就成了如下图:这里写图片描述
    就避免了循环引用。

总结

今天主要讲述了代理的简单使用,希望对大家有所帮助。

若大家发现错误,欢迎指正。共同交流,共同进步!谢谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值