Java必学的23种设计模式(详细)(8)
Java设计模式(疯狂Java联盟版)
1.Handler
定义一个处理请求的接口。 (可选)实现后继链。
2.ConcreteHandler 处理它所负责的请*。 可访问它的后继者。
如果可处理该*求,就处理*;否则将该请求转发给它的后继者。
3.Client
向链上的具体处理者(ConcreteHandler)对象提交请求。
类图
例子 Hand*er
public interface RequestHandle {
void handleRequest(R*quest request); }
ConcreteHandler
public class HRRequestHandle implements RequestHandle {
public void handleRequest(Request request) { if (request instanceof DimissionRequest) { System.out.println(\要离职, 人事审批!\ }
System.out.println(\请求完*\ } }
36
Java设计模式(疯狂Java联盟版)
public class PMRequestHandle implements RequestHandle {
Req*estHandle rh;
public PMRequestHandle(RequestHandle *h) { this.rh = rh; }
public void handle*equest(Request request) { if (request instanceof AddMoneyRequest) {
System.out.println(\要加薪, 项目经理审批!*); } else {
rh.handleRequest(request); } } }
public class TLRequestHandle implements RequestHandle {
RequestHandle rh;
public TLRequestHandle(RequestHand*e rh) { this.rh = rh; }
public void handleRequest(Request request) { if (request instanceof LeaveRe*uest) {
System.ou*.println(\要请假, 项目组长审批!\ } else {
rh.handleRequest(request); } } }
Client
public *lass Test {
public static v*id main(String[] args) {
RequestHa*dle hr = *ew HRRequ*stHandle(); Requ*stHandle pm = new P*RequestHandle(hr); RequestHandle tl = new TLRequestHandle(pm);
37
Java设计模式(疯狂Java联盟版)
//team leader处理离职请求
Request request = new DimissionRequest()* tl.handleRequest(request);
System.out.println(\ //team leader处理加薪请求
request = new AddMoneyRequest(); tl.handleRequ*st(request);
System.out.println(\ //项目经理上理辞职请求
requ*st = ne* Dimissio*Request(); pm.handleRequest(request); } }
result
要离职, 人事审批! 请求完毕 =======*===
要加薪, 项目经理审批! ========
要离职, 人事审批! 请求完毕
1.3.2 命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的*作。
适用性
1.抽象出待执行的动作以参数化某对象。
2.在不同的时刻指定、排列和执行请求。
3.支持取消操作。
4.支持修改日志,这样当系统崩溃时,这*修改可以被重做一遍。
5.用构建在原语操作上的高层操作构造一个系统。
参与者
38
Java设计模式(疯狂Java联盟版)
1.Comma*d
声明执行操作的接口。
2.ConcreteCommand
将一个接收者对象绑定于一个动作。
调用接收者相应的操作,以实现Execute。
3.Client
创建一个具体命令对象并设定它的接收者。
4.Invoker
要求该命令执行这个请求。
5.Recei*er
知道如何实*与执行一个请求相关的操作。任何类都可能作为一个接收者。
类图
例子 Command
public abstract class *ommand {
protecte* Receiver receiver;
public Command(Receiver re*eiver) { this.receiver = receiver; }
public abstract *oid execute();
39
Java设计模式(疯狂Java联盟版)
}
ConcreteCommand
public class CommandImpl extends Comman* {
public CommandImpl(Receiv*r receiver) { super(receiver); }
pu*lic void *xecute*) { receiver.request(); } }
Invoker
public cl*ss Invoker {
private Command command;
pub*ic void setCommand(Command c*mmand) { this.command = command; }
public void execute*) { command.execute(); } }
Receiver
public class Receiver {
public void receive() {
S*stem.out.println(\ } }
Test
publ*c class Test {
pub*ic static void main*String[] args) { R*ceiver rec = new Receiver();
Command cmd = n*w CommandImpl(rec); Invoker i = new Invoker(); i.setCom*and(cmd);
40
…… 此处隐藏:985字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




