1. 程式人生 > >java設計模式9.備忘錄模式、訪問者模式、調停者模式

java設計模式9.備忘錄模式、訪問者模式、調停者模式

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 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與模式》

java設計模式9.備忘錄模式、訪問者模式、調停者模式