iOS 之 责任链模式详解
来源:互联网 发布:c语言 stdio 编辑:程序博客网 时间:2024/06/03 14:20
设计模式在实际编程中对遇到的问题解决方案的抽象,也就是每一个设计模式都在编程实例中有体现
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
具体的请看 代码实例 由于写的比较 仓促 类的名字 命名不太规范
1. 首先创建 一个协议继承NSObject
#import <Foundation/Foundation.h>
@protocol AllProtocol <NSObject>
// 设置继任者
-(void)setSuccessor:(id<AllProtocol>)successor;
//获取继任者
- (id<AllProtocol>)successor;
//处理请求
- (void)handleRequest:(id)request;
@end
2. 创建三个类 每个类遵循这个协议 例如
在 .h 文件中
#import <Foundation/Foundation.h>
#import "AllProtocol.h"
@interface Person : NSObject<AllProtocol>
@end
person类
在Person.h进行实现协议
#import "Person.h"
@interface Person ()
//进行了强引用也可以使用weak
@property (nonatomic,strong) id<AllProtocol>nextsucessor;
@end
@implementation Person
// 设置继任者
-(void)setSuccessor:(id<AllProtocol>)successor{
self.nextsucessor = successor;
}
//获取继任者
- (id<AllProtocol>)successor{
return self.nextsucessor;
}
//处理请求
- (void)handleRequest:(id)request{
NSString *string =request;
BOOL isMake = [string isEqualToString:@"胖子"];
if(isMake==NO){
[self.nextsucessor handleRequest:string];
}else{
NSLog(@"是胖子");
}
}
@end
Whrite类
#import "Whrite.h"
@interface Whrite ()
@property (nonatomic,strong) id<AllProtocol> nextSuccessor;
@end
@implementation Whrite
// 设置继任者
-(void)setSuccessor:(id<AllProtocol>)successor{
self.nextSuccessor = successor;
}
//获取继任者
- (id<AllProtocol>)successor{
return self.nextSuccessor;
}
//处理请求
- (void)handleRequest:(id)request{
NSString *string = request;
BOOL isBai = [string isEqualToString:@"白"];
if ( isBai==NO) {
[self.nextSuccessor handleRequest:string];
}else{
NSLog(@"是白");
}
}
@end
Page 类
#import "Page.h"
@interface Page ()
@property (nonatomic,strong)id<AllProtocol> nextSuccessor;
@end
@implementation Page
// 设置继任者
-(void)setSuccessor:(id<AllProtocol>)successor{
self.nextSuccessor = successor;
}
//获取继任者
- (id<AllProtocol>)successor{
return self.nextSuccessor;
}
//处理请求
- (void)handleRequest:(id)request{
NSString *string = request;
BOOL isPag = [string isEqualToString:@"狗"];
if(isPag ==NO){
[self.nextSuccessor handleRequest:string];
}else{
NSLog(@"%@",string);
}
}
@end
由于是链接模式 都需要一个结点下面 我们来创建一个结点里面实现的方法跟其他类一样 不需要做任何的操作
#import "Handel.h"
@interface Handel ()
@property (nonatomic,strong)id<AllProtocol> nextSuccessor;
@end
@implementation Handel
// 设置继任者
-(void)setSuccessor:(id<AllProtocol>)successor{
self.nextSuccessor = successor;
}
//获取继任者
- (id<AllProtocol>)successor{
return self.nextSuccessor;
}
//处理请求
- (void)handleRequest:(id)request{
[self.nextSuccessor handleRequest:request];
}
@end
在viewController 的进行实现下 ,实际就是进行链表的链接
#import "ViewController.h"
#import "Person.h"
#import "Handel.h"
#import "Whrite.h"
#import "Page.h"
@interface ViewController ()
@property (nonatomic,strong)Handel *hadle;
@property (nonatomic,strong)Person *person;
@property (nonatomic,strong)Page *pag;
@property (nonatomic,strong)Whrite *whrite;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor =[UIColor whiteColor];
self.hadle = [Handel new];
self.person = [Person new];
self.pag = [Page new];
self.whrite = [Whrite new];
self.hadle.successor =self.person;
self.person.successor = self.pag;
self.pag.successor =self.whrite;
[self.hadle handleRequest:@"胖子"];
}
运行结果:
016-03-23 10:30:51.770 责任链模式[9183:91620] 是胖子
[self.hadle handleRequest:@"白"];
运行结果:
2016-03-23 11:10:50.023 责任链模式[11598:115485] 是白
责任链模式 把一个职能分解处理 ,在实际运用的过程中我们可以进行类别的分配,上面的例子只是简单地实现的一下,当传递的消息被处理以后,就会中断,被请求处理的时件 不会走完整个责任链,如果想让把这条责任链走完,你可以在判断的时候,无论事件 是否成立都让数据处理链条进行传递下去。
- iOS 之 责任链模式详解
- IOS设计模式之责任链模式
- 责任链模式 详解
- 责任链模式 详解
- iOS设计模式浅析之责任链设计模式
- JAVA 设计模式实例详解之责任链模式
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- java之责任链模式
- GOF之责任链模式
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- # 小试牛刀之责任链模式
- iOS设计模式--责任链模式
- iOS 设计模式 - 责任链模式
- iOS 设计模式 --责任链模式
- 更新证书错误:No matching provisioning profiles found
- C字符串和C++字符串
- Spring Security(16)——基于表达式的权限控制
- SVN如何处理包含@2x or @3x的图片文件
- 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)
- iOS 之 责任链模式详解
- ExpandableListView OnChildClickListener 失效解决
- 搜索引擎选择: Elasticsearch与Solr
- 【Web优化】Yslow优化法则(一)最小化HTTP请求数
- ThreadPoolExecutor线程池理解
- linux sort详解
- log4j 如何配置不同的classeslog写入不同的文件中
- Java+PHP整合
- iOS runtime学习之消息转发机制