使用@selector模仿代理功能降低代码耦合度
使用@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模仿代理功能降低代码耦合度相关推荐
- SpringIOC是如何降低代码的耦合度的
理解Spring IOC概念及如何降低代码耦合度 很多八股文需要更深入去详细了解其思想,才不会记得那么累那么枯燥.本想查资料总结一篇关于IOC容器解耦的思想,但是看到这篇文章感觉挺好的,就不需要重写了 ...
- java多态 降低代码耦合性_如何降低耦合度
一.什么是耦合度 耦合度就是某模块(类)与其它模块(类)之间的关联.感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准.耦合的强度依赖于以下几个因素:(1)一个模块 ...
- 在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
孙 茂伟, 测试工程师, IBM 孙茂伟在北京科技大学获得工学学士.工学硕士学位,现于 IBM CDL ECM FileNet EForms TEAM 从事自动化测试相关工作. 简介: 本文将向广大 ...
- 瑞吉外卖项目详细分析笔记及所有功能补充代码
目录 项目刨析简介 技术栈 项目介绍 项目源码 一.架构搭建 1.初始化项目结构 2.数据库表结构设计 3.项目基本配置信息添加 公共字段的自动填充 全局异常处理类 返回结果封装的实体类 二.管理端业 ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- 使用代理同步Chromium代码的心得(V2.0)
先参看 http://www.chromium.org/developers/how-tos/build-instructions-windows 非常坑爹,谷歌获取chromium源码的方式又变了! ...
- java 耦合度_Java第三十八天,Spring框架系列,使用工厂模式降低程序耦合度
一.什么是耦合 程序之间的依赖关系: ①类之间的依赖 ②方法之间的依赖 注意: 不可能完全的消除依赖关系,而只能是降低程序之间的依赖关系 二.解耦 降低程序之间的依赖关系: 1.解决类之间的依赖关系: ...
- AI美颜SDK功能算法代码解析
AI美颜这个概念是近几年所兴起的新技术,它是以海量数据为中心,以人工智能.深度学习的方式实现智能美颜的算法. 一.AI美颜算法与传统美颜算法有哪些区别? 从浅显的角度来看,AI美颜算法与传统美颜算法呈 ...
- 利用Java反射机制降低代码圈复杂度
利用Java反射机制降低代码圈复杂度 在实际的工作中,我遇到了项目里老代码存在圈复杂度过高的问题,在提交代码的时候通不过CI(代码检查)的Lizard复杂度检查,所以迫切需要解决这个问题,运用Java ...
- 如何在JAVA项目中实现反向代理功能?
前言(什么是反向代理) 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet ...
最新文章
- 看漫画还是学数学?小孩子才做选择,大人全都要!
- [MySQL]增加用户 授权 远程登录
- 下面我将随机抽取一名幸运女生,XXXXX
- Linux -- ***检测系统(IDS)介绍及应用(1)
- HOWTO:如果检测用户是从系统的“添加/删除”中卸载软件
- Ansible初始连接被控端配置
- 禁止input输入框输入指定内容
- [深度学习] 自然语言处理---Transformer原理(一)
- java 级联删除文件夹下的所有文件
- IOC操作Bean管理XML方式(有参构造注入属性)
- 图解集成学习中的梯度提升思想
- 主板扩展槽图解_子板:扩展到主板
- 解决Ctrl+鼠标左键点击后怎么返回
- Ubuntu Linux DNS服务器 BIND9配置文件命令介绍
- App应用字体大小保持固定以及关于Configuration的变化
- Human-like learning在对话机器人中的魔性运用
- docker-compose部署MinIO分布式集群
- linux的备份和恢复命令,Ubuntu 16.04备份和恢复小结
- 不懂就问,刚用vs2019运行一个c++为什么会这样啊
- 1-5 CAD基础 圆(circle)
热门文章
- 金蝶移动bos开发教程_移动安全(四)|NDK开发教程_JavaToC
- unity 获取鼠标点击位置_Unity中实现瓶中液体晃动的效果(从建模开始)一
- php atlas,Apache Atlas是什么意思
- python项目描述怎么写_个人项目(python)
- layui分页完整实例php,使用 layui 后端分页的实例
- 大数据导论章节答案_苹果手机一般能用几年 一份大数据告诉你答案
- 图的存储结构之十字链表、邻接多重表、边集数组
- 一元、二元、三元逻辑运算符
- 2016年零售业CIO的七大革命性挑战
- PLCrashReporter的使用