1、关于代理对象的设计小技巧

在设计一个类,需要通过代理和协议来从外部获取需要的动态的数据。那么在这里设计使用代理会有两种方法。

<第一种方法> 也是比较常见的:

  在你设计的类中,声明一个代理属性

  

  然后外部使用的时候

  

  最后根据那个<...Protocol>协议,去遵循这个协议并实现协议的方法。

<第二种方法>在创建这个你要设计的类对象的构造方法中添加一个代理对象的参数,目的就是按照需要,你如果要创建这个对象,你必须添加代理对象。

  

  这样外部在创建这个对象的时候,使用这个方法就暗中强制性的需要你添加这个代理对象

  

  然后因为通过self设置当前对象为代理,如果这个代理对象遵循了协议但是没有实现协议的方法,就会警告提示你要实现协议方法。

总结:第一种方法大家都很熟悉,但是对于第二种方法也是某些特殊的情况必要的设计方法,这个方法也是源自我开发中遇到的一个情况:一个类中需要实时判断当前设备的网络状态,但是如果使用第一种方法设计这个类的话,用户端在使用这个类,可能会忽略设置代理对象,这样是不严谨的,是容易出bug的,所以采用第二种设计方法,可以限制用户端在使用这个对象就必须实现设置代理对象。

具体使用方法一还是方法二,还是要根据实际开发情况来定夺和设计。

最新文章

  1. Nginx 安装
  2. 关于Xcode7中添加不了libresolv.dylib等类似库的问题
  3. Mongoose 框架初学使用记录
  4. DICOM标准相关资料
  5. logback与Log4J的区别
  6. 网易云课堂_程序设计入门-C语言_期末考试编程题
  7. Nginx 之五: Nginx服务器的负载均衡、缓存与动静分离功能
  8. SSH整合,&quot;sessionFactory &quot; or &quot;hibernateTemplate &quot; is required异常
  9. js1中call和apply的用法
  10. mysql安装及常见使用
  11. PHP 环境搭建及zabbix安装遇到的一些坑.
  12. Python中模块json与pickle的功能介绍
  13. 小小知识点(八)——星座图与PSK、QAM调制的关系
  14. vue的风格指南(必要的)
  15. React 中的key值
  16. vim 翻页命令
  17. K-means算法的matlab程序(初步)
  18. pythonz之__new__与__init__
  19. java多态的向上转型与向下转型(与编译时类型与运行时类型有关)
  20. php手撸轻量级开发(二)框架加载

热门文章

  1. ECLIPSE ANDROID PROJECT IMPORT SUMMARY
  2. C语言学习006:歌曲搜索
  3. C#实现网页爬虫
  4. C# CGI程序
  5. MySQL MHA配置常见问题
  6. LeetCode124:Binary Tree Maximum Path Sum
  7. LeetCode123:Best Time to Buy and Sell Stock III
  8. Centos压缩与打包
  9. JNDI解读(转)
  10. GJM :用JIRA管理你的项目(三)基于LDAP用户管理 [转载]