java設計模式9.備忘錄模式、訪問者模式、調停者模式
阿新 • • 發佈:2018-11-03
col des spa 角色 opera lis () concrete tst
- 備忘錄模式
備忘錄模式又叫快照模式,備忘錄對象是一個用來存儲另外一個對象內部狀態快照的對象。備忘錄的用意是在不破壞封裝的條件下,將一個對象的狀態捕捉,並外部化存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態,備忘錄模式常與命令模式和叠代子模式一起使用。
- 訪問者模式
訪問者的目的是封裝一些施加於某種數據結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的數據結構則可以保持不變。訪問者模式使適用於數據結構相對未定的系統,它把數據結構和作用於結構之上的操作解耦。
- 抽象訪問者角色Visitor:聲明一個或多個訪問操作,形成所有的具體元素角色必須實現的接口。
- 具體訪問者角色ConcreteVisitor:實現抽象訪問者角色所聲明的接口。
- 抽象節點角色Node:聲明一個接受操作,接受一個訪問者對象作為一個參量。
- 具體節點角色Node:實現抽象元素所規定的接受操作。
- 結構對象角色ObjectStructrue:能夠遍歷結構中所有元素,如果需要,提供一個高層次的接口讓接口訪問者可以訪問每一個元素,可以設計成一個符合對象或者一個聚集。
public abstract class Node { public abstract void accept(Visitor visitor); } public class NodeA extends Node{ @Override public voidaccept(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與模式》
java設計模式9.備忘錄模式、訪問者模式、調停者模式