23设计模式之责任链模式(COR)
来源:互联网 发布:mac host文件 编辑:程序博客网 时间:2024/05/09 15:35
返回目录
1 概述
COR属于行为型模式中的一种,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者。
2 适用性
- 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
- 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
- 可处理一个请求的对象集合应被动态指定。
3 参与者
- Handler:定义一个处理请求的接口。(可选)实现后继链。
- ConcreteHandler:处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给它的后继者。
- Client:向链上的具体处理者(ConcreteHandler)对象提交请求。
4 类图
5 代码实现
//// YJCOR.swift// DesignPattern//// Created by yangjun on 15/11/27.// Copyright © 2015年 阳君. All rights reserved.//import Cocoa/// 定义一个处理请求的协议private protocol RequestHandleProtocol { func handleRequest(request: RequestProtocol)}/// 处理它所负责的请求。可访问它的后继者。private class HRRequestHandle: RequestHandleProtocol { func handleRequest(request: RequestProtocol) { if request is DimissionRequest { print("要离职, 人事审批!") } print("请求完毕") }}/// 处理它所负责的请求。可访问它的后继者。private class PMRequestHandle: RequestHandleProtocol { var rh: RequestHandleProtocol init(requestHandle: RequestHandleProtocol){ self.rh = requestHandle } func handleRequest(request: RequestProtocol) { if request is AddMoneyRequest { print("要加薪, 项目经理审批!") } else { rh.handleRequest(request) } }}/// 处理它所负责的请求。可访问它的后继者。private class TLRequestHandle: RequestHandleProtocol { var rh: RequestHandleProtocol init(requestHandle: RequestHandleProtocol){ self.rh = requestHandle } func handleRequest(request: RequestProtocol) { if request is LeaveRequest { print("要请假, 项目组长审批!") } else { rh.handleRequest(request) } }}// MARK: -/// 请求协议private protocol RequestProtocol {}/// DimissionRequest离职请求private class DimissionRequest: RequestProtocol {}/// 加薪请求private class AddMoneyRequest: RequestProtocol {}/// 请假请求private class LeaveRequest: RequestProtocol {}// MARK: -/// 责任链模式class YJCOR: YJTestProtocol { func test() { let hr = HRRequestHandle() let pmRH = PMRequestHandle(requestHandle: hr) let tl = TLRequestHandle(requestHandle: pmRH) // 向链上的具体处理者(ConcreteHandler)对象提交请求 // team leader处理离职请求 var request: RequestProtocol = DimissionRequest() tl.handleRequest(request) print("====") // team leader处理加薪请求 request = AddMoneyRequest() tl.handleRequest(request) print("====") // team leader处理请假请求 request = LeaveRequest() tl.handleRequest(request) }}
其他
源代码
Framework
文档修改记录
版权所有
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974/Blog
0 0
- 设计模式之责任链模式COR
- 23设计模式之责任链模式 (COR)
- 23设计模式之责任链模式(COR)
- 设计模式--责任链模式(COR)
- 设计模式:责任链模式(Chain of Responsibility, CoR)
- 浅谈JAVA设计模式之——责任链模式(COR)
- Java设计模式(七) COR(责任链)模式及Tomcat引申
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- 23设计模式之原型模式(Prototype)
- getchar,getch,scanf,gets,getche一群纠结的兄弟
- MarkDown的简单用法
- nice Validator
- 哈希桶的分析与实现
- 23设计模式之责任链模式(COR)
- servlet乱码解决(个人记录)
- Could not resolve all dependencies for configuration
- 23设计模式之中介者模式(Mediator)
- markdown 练习
- 23设计模式之装饰模式(Decorator)
- Linux中增加软路由的两种方法
- 企业汇报系统细节追加(二)
- Selenium webdriver 学习笔记(三) - 基本UI控件操作