备忘录模式又叫快照模式, 备忘录对象是一个用来存储另外一个对象内部状态快照的对象. 备忘录的用意是在不破坏封装的条件下, 将一个对象的状态捕捉, 并外部化存储起来, 从而可以在将来合适的时候把这个对象还原到存储起来的状态, 备忘录模式常与命令模式和迭代子模式一起使用.
访问者模式
访问者的目的是封装一些施加于某种数据结构元素之上的操作. 一旦这些操作需要修改的话, 接受这个操作的数据结构则可以保持不变. 访问者模式使适用于数据结构相对未定的系统, 它把数据结构和作用于结构之上的操作解耦.
抽象访问者角色 Visitor: 声明一个或多个访问操作, 形成所有的具体元素角色必须实现的接口.
具体访问者角色 ConcreteVisitor: 实现抽象访问者角色所声明的接口.
抽象节点角色 Node: 声明一个接受操作, 接受一个访问者对象作为一个参量.
具体节点角色 Node: 实现抽象元素所规定的接受操作.
结构对象角色 ObjectStructrue: 能够遍历结构中所有元素, 如果需要, 提供一个高层次的接口让接口访问者可以访问每一个元素, 可以设计成一个符合对象或者一个聚集.
- public abstract class Node {
- public abstract void accept(Visitor visitor);
- }
- public class NodeA extends Node{
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- public void operationA(){
- System.out.println("A");
- }
- }
- public class NodeB extends Node{
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- public void operationB(){
- System.out.println("B");
- }
- }
- public interface Visitor {
- void visit(NodeA node);
- void visit(NodeB node);
- }
- public class VisitorA implements Visitor{
- @Override
- public void visit(NodeA node) {
- node.operationA();
- }
- @Override
- public void visit(NodeB node) {
- node.operationB();
- }
- }
- public class VisitorB implements Visitor{
- @Override
- public void visit(NodeA node) {
- node.operationA();
- }
- @Override
- public void visit(NodeB node) {
- node.operationB();
- }
- }
- public class ObjectStructure {
- private List<Node> nodes;
- public ObjectStructure(){
- nodes = new ArrayList<Node>();
- }
- public void action(Visitor visitor){
- for(Node node : nodes){
- node.accept(visitor);
- }
- }
- public void add(Node node){
- nodes.add(node);
- }
- }
- public class Client {
- public static void main(String[] args) {
- ObjectStructure structs = new ObjectStructure();
- structs.add(new NodeA());
- structs.add(new NodeB());
- Visitor visitor = new VisitorA();
- structs.action(visitor);
- }
- }
调停者模式
调停者模式包装了一系列对象相互作用的方式, 使得这些对象不必互相明显引用. 从而使它们可以较松散地耦合, 当这些对象中的某些对象之间的相互作用发生改变时, 不会立即影响到其他的一些对象之间的相互作用. 从而保证这些相互作用可以彼此独立地变化.
在调停者模式中, 所有的成员对象都可以协调工作, 但又不直接相互管理. 这些对象都与一个处于中心地位的调停者对象发生紧密的关系, 由这个调停者对象进行协调工作. 这个协调者对象叫做调停者, 而调停者所协调的成员对象称作同事对象.
# 笔记内容参考《java 与模式》
来源: http://www.bubuko.com/infodetail-2832006.html