使用@selector模仿代理功能降低代码耦合度

说明

该模式的好处就是两个产生联系的对象间并没有具体的耦合代码,增删改查均很直观

源码

Model

//
//  Model.h
//  SELMethod
//
//  Created by YouXianMing on 15/5/22.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import <Foundation/Foundation.h>#define SafePerformSelector(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)@interface Model : NSObject/***  属性名字*/
@property (nonatomic, strong)  NSString  *name;/***  设置代理与方法*/
@property (nonatomic, weak) id    delegate;
@property (nonatomic)       SEL   method;- (void)doSomeThing;@end
//
//  Model.m
//  SELMethod
//
//  Created by YouXianMing on 15/5/22.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import "Model.h"@implementation Model- (void)doSomeThing {// 执行代理以及方法if (_method && _delegate) {SafePerformSelector([_delegate performSelector:_method withObject:self]);}
}@end

ViewController

//
//  ViewController.m
//  SELMethod
//
//  Created by YouXianMing on 15/5/22.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import "ViewController.h"
#import "Model.h"@interface ViewController ()@property (nonatomic, strong) Model *model;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 初始化对象self.model        = [Model new];self.model.name   = @"YouXianMing";// 设置代理与方法self.model.method   = @selector(modelValue:);self.model.delegate = self;// 执行操作[self.model doSomeThing];
}- (void)modelValue:(Model *)value {NSLog(@"%@", value.name);
}@end

细节

使用@selector模仿代理功能降低代码耦合度相关推荐

  1. SpringIOC是如何降低代码的耦合度的

    理解Spring IOC概念及如何降低代码耦合度 很多八股文需要更深入去详细了解其思想,才不会记得那么累那么枯燥.本想查资料总结一篇关于IOC容器解耦的思想,但是看到这篇文章感觉挺好的,就不需要重写了 ...

  2. java多态 降低代码耦合性_如何降低耦合度

    一.什么是耦合度 耦合度就是某模块(类)与其它模块(类)之间的关联.感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准.耦合的强度依赖于以下几个因素:(1)一个模块 ...

  3. 在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍

    孙 茂伟, 测试工程师, IBM 孙茂伟在北京科技大学获得工学学士.工学硕士学位,现于 IBM CDL ECM FileNet EForms TEAM 从事自动化测试相关工作. 简介: 本文将向广大 ...

  4. 瑞吉外卖项目详细分析笔记及所有功能补充代码

    目录 项目刨析简介 技术栈 项目介绍 项目源码 一.架构搭建 1.初始化项目结构 2.数据库表结构设计 3.项目基本配置信息添加 公共字段的自动填充 全局异常处理类 返回结果封装的实体类 二.管理端业 ...

  5. Nginx代理功能与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

  6. 使用代理同步Chromium代码的心得(V2.0)

    先参看 http://www.chromium.org/developers/how-tos/build-instructions-windows 非常坑爹,谷歌获取chromium源码的方式又变了! ...

  7. java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度

    一.什么是耦合 程序之间的依赖关系: ①类之间的依赖 ②方法之间的依赖 注意: 不可能完全的消除依赖关系,而只能是降低程序之间的依赖关系 二.解耦 降低程序之间的依赖关系: 1.解决类之间的依赖关系: ...

  8. AI美颜SDK功能算法代码解析

    AI美颜这个概念是近几年所兴起的新技术,它是以海量数据为中心,以人工智能.深度学习的方式实现智能美颜的算法. 一.AI美颜算法与传统美颜算法有哪些区别? 从浅显的角度来看,AI美颜算法与传统美颜算法呈 ...

  9. 利用Java反射机制降低代码圈复杂度

    利用Java反射机制降低代码圈复杂度 在实际的工作中,我遇到了项目里老代码存在圈复杂度过高的问题,在提交代码的时候通不过CI(代码检查)的Lizard复杂度检查,所以迫切需要解决这个问题,运用Java ...

  10. 如何在JAVA项目中实现反向代理功能?

    前言(什么是反向代理) 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...

最新文章

  1. 看漫画还是学数学?小孩子才做选择,大人全都要!
  2. [MySQL]增加用户 授权 远程登录
  3. 下面我将随机抽取一名幸运女生,XXXXX
  4. Linux -- ***检测系统(IDS)介绍及应用(1)
  5. HOWTO:如果检测用户是从系统的“添加/删除”中卸载软件
  6. Ansible初始连接被控端配置
  7. 禁止input输入框输入指定内容
  8. [深度学习] 自然语言处理---Transformer原理(一)
  9. java 级联删除文件夹下的所有文件
  10. IOC操作Bean管理XML方式(有参构造注入属性)
  11. 图解集成学习中的梯度提升思想
  12. 主板扩展槽图解_子板:扩展到主板
  13. 解决Ctrl+鼠标左键点击后怎么返回
  14. Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
  15. App应用字体大小保持固定以及关于Configuration的变化
  16. Human-like learning在对话机器人中的魔性运用
  17. docker-compose部署MinIO分布式集群
  18. linux的备份和恢复命令,Ubuntu 16.04备份和恢复小结
  19. 不懂就问,刚用vs2019运行一个c++为什么会这样啊
  20. 1-5 CAD基础 圆(circle)

热门文章

  1. 金蝶移动bos开发教程_移动安全(四)|NDK开发教程_JavaToC
  2. unity 获取鼠标点击位置_Unity中实现瓶中液体晃动的效果(从建模开始)一
  3. php atlas,Apache Atlas是什么意思
  4. python项目描述怎么写_个人项目(python)
  5. layui分页完整实例php,使用 layui 后端分页的实例
  6. 大数据导论章节答案_苹果手机一般能用几年 一份大数据告诉你答案
  7. 图的存储结构之十字链表、邻接多重表、边集数组
  8. 一元、二元、三元逻辑运算符
  9. 2016年零售业CIO的七大革命性挑战
  10. PLCrashReporter的使用