关闭

代理设计模式

标签: 设计模式
136人阅读 评论(0) 收藏 举报
分类:

写在前面

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:61220次
    • 积分:1985
    • 等级:
    • 排名:千里之外
    • 原创:143篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条
    最新评论