Java必学的23种设计模式(详细)(8)

2019-08-26 18:02

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


Java必学的23种设计模式(详细)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年秋季新版湘教版七年级数学上学期4.2、线段、射线、直线同

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: