zoukankan      html  css  js  c++  java
  • java设计模式9.备忘录模式、访问者模式、调停者模式

    • 备忘录模式

    备忘录模式又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态快照的对象。备忘录的用意是在不破坏封装的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态,备忘录模式常与命令模式和迭代子模式一起使用。

    • 访问者模式

    访问者的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。访问者模式使适用于数据结构相对未定的系统,它把数据结构和作用于结构之上的操作解耦。

    • 抽象访问者角色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与模式》

  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/shanhm1991/p/9898680.html
Copyright © 2011-2022 走看看