Java的23种设计模式(疯狂Java总结)(8)

2019-08-31 18:02

Java设计模式(疯狂Java联盟版)

public class ProxyObject implements Object {

Objec* obj;

public ProxyObject() {

System.out.println(\这是代理类\ o*j = new ObjectImpl(); }

public void ac*ion() {

System.out.p*intln(\代理开始\ obj.action*);

System.out.println(*代理结束\ } }

Subject

public interface Obje*t {

void action(); }

RealSubject

public class ObjectImpl implements Object {

pu*lic void action() {

System.out.println(\ System.out.println(\

System.out.pr*ntln(\这是被代理的类\ System.out.println(\ System.out.println(\ } }

Test

public class Test {

publi* static void main() {

Object ob* = new ProxyObject(); obj.action(); * }

result

35

Java设计模式(疯狂Java联盟版)

这是代理类 代理开始 ======== =*======

这是被代理的类 ======== ======*= 代理结束

1.3 行为型模式

Chain of Responsibility ( 责任链模式 ) Command ( 命令模式 ) Interpreter ( 解释器模式 ) Iterator ( 迭代器*式 ) Mediator ( 中介者模式 ) Memento ( 备忘录模式 ) Observer ( 观察者模式 ) State ( 状*模式 ) Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Vis*tor ( 访问者模式 )

1.3.1 责任链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一*链,

并*着这条链传递该请求,直到有一个对象处理它为止。

这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者.

适用性

1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。

2.你*在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。

3.可处理一个请求的对象集合应被动态指定。

参与者

36

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(\请求完*\ }

37

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);

38

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.用构建在原语操作上的高层操作构造一个系统。

参与者

39


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

下一篇:浙江美丽乡村考察体会(20170613)

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

马上注册会员

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