Java Design Pattern(3)
来源:互联网 发布:挑选墙布 知乎 编辑:程序博客网 时间:2024/04/28 15:06
1、TIPS
(1)命令模式
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
采用命令模式的解决方案:
Command:定义命令的接口,声明执行的方法;
ConcreteCommand:命令接口实现对象:通常会持有接收者,并调用接收者的功能来完成命令要执行的功能;
Receiver:接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能实现命令要求实现的相应功能;
Invoker:要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,相当于使用命令对象的入口。是提供给客户使用的。
Client:创建具体的命令对象,并设置命令对象的接收者。注:这个不是常规意义上的客户端,而是在组装命令对象和接收者。把这个Client称为装配者更好理解,因为真正使用命令的客户端是从Invoker来触发执行。
命令模式:
a、把请求封装成为命令对象,并定义了统一的执行操作的接口。
b、真正的用户通过Invoker触发命令。
c、命令模式的接收者知道如何真正执行命令的操作。
命令模式的调用顺序图:
使用命令模式分为两个阶段:一个阶段是组装命令对象和接收者对象的过程;另外一个阶段是触发调用Invoker,来让命令真正执行的过程。
a、命令模式组装过程的调用顺序图:
b、命令模式执行过程的调用顺序图:
命令模式的参数化配置:可以用不同的命令对象,去参数化配置客户的请求;
命令模式的优点:
a、命令模式使得发起命令的对象——客户端,和具体实现命令的对象——接收者对象完全解耦。
b、扩展新命令很容易。只需要实现新的命令对象,然后在装配时,把具体的实现对象设置到命令对象中,然后就可以使用这个命令对象,已有的实现完全不用变化。
命令模式的本质:封装请求;
命令模式的关键就是把请求封装为命令对象,然后就可以对这个对象进行一系列的处理了。
(2)观察者模式
定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
解决问题:
当一个对象的状态发生改变时,让依赖于它的所有对象得到通知,并进行相应的处理。
采用观察者模式的解决方案:
Subject:目标对象。一个目标可以被多个观察者观察;目标提供对观察者注册和退订的维护;当目标的状态发生变化时,目标负责通知所有注册的、有效的观察者。
Observer:观察者接口。提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以在这个方法里回调目标对象,以获取目标对象的数据。
ConcreteSubject:具体的目标实现对象,用来维护目标状态,当目标对象的状态发生改变时,通知所有注册的、有效的观察者,让观察者执行相应的处理。
ConcreteObserver:观察者的具体实现对象,用来接收目标的通知,并进行相应的后续处理,比如更新自身的状态以保持和目标的相应状态一致。
一个观察者也可以观察多个目标。一般情况下,观察者应该为不同的观察者目标定义不同的回调方法。
单向依赖:
在观察者模式中,观察者和目标是单向依赖的,只有观察者依赖于目标,而目标是不会依赖于观察者的。
命名建议:
观察者模式又被称为发布——订阅模式。
目标接口的定义,建议在名称后面加Subject;观察者接口的定义,建议在名称后面加Observer;观察者接口的更新方法,建议名称为update。
触发通知的时机:
一般情况下,是在完成了状态维护后触发。
观察者模式准备阶段示意图:
观察者模式运行阶段示意图:
推模型:
目标对象主动向观察者推送目标的详细信息,不管观察者是否需要,推送的信息通常是目标对象的全部或部分数据,相当于是在广播通信。
拉模型:
目标对象在通知观察者时,由观察者主动到目标对象中获取,相当于是观察者从目标对象中拉数据。一般会把目标对象自身通过update方法传递给观察者,这样在观察者需要获取数据时,就可以通过这个引用来获取了。
观察者模式的优点:
a、观察者模式实现了观察者和目标之间的抽象耦合;
b、观察者模式实现了动态联动;
c、观察者模式支持广播通信;
观察者模式的缺点:
a、可能会引用无谓的操作。
观察者模式的本质:触发联动。
当修改目标对象的状态时,就会触发相应的通知,然后会循环调用所有注册的观察者对象的相应方法,其实就相当于联动调用这些观察者的方法。
何时选用观察者模式:
a、当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式。将这两者封装成观察者和目标对象,当目标对象变化时,依赖于它的观察者对象也会发生相应的变化。
b、若在更改一个对象时,需要同时连带改变其他的对象,且不知道究竟应该有多少对象需要被连带改变,这种情况可以选用观察者模式。
c、当一个对象必须通知其他的对象,但你又希望这个对象和其它被它通知的对象是松散耦合的。此时可以选用观察者模式。
(3)原型模式
(4)享元模式
(5)组合模式
2、PS
(1)
(2)
- Java Design Pattern(3)
- Java Design Pattern(1)
- Java Design Pattern(2)
- JAVA Design Pattern--Iterator Pattern
- java design pattern
- java singleton design pattern
- Java Design Pattern
- java design pattern - singleton
- java design pattern
- java design pattern -- facade
- java design pattern -- prototype
- Java design pattern: Adapter
- Java Design Pattern: Factory
- Java Design Pattern: Singleton
- Java Design Pattern: State
- Java Design Pattern: Prototype
- Java Design Pattern: Builder
- Java Design Pattern
- “Insert into 语句的语法错误”的解决方法
- string 报错——Android 2.3SDK中关于xml的format问题
- poj1050
- C#中静态与非静态方法比较
- java网络编程
- Java Design Pattern(3)
- sync、fsync、fdatasync三个函数以及O_SYNC标志位的区别
- 做网站用UTF-8编码还是GB2312编码?
- shinken 监控报警系统配置
- weakreference实现原理分析
- Asp.net 复习题1
- 去掉android的屏幕上的titlebar
- 数据库问题
- 大数乘法