代理设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012437355/article/details/52372786

写在前面

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

总结

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

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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页