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

  • 相关阅读:
    npm 全局执行 update 、 outdated 出现 npm-debug.log 404 错误的问题
    python 爬虫爬取内容时, xa0 、 u3000 的含义
    SCNU ACM 2016新生赛决赛 解题报告
    SCNU ACM 2016新生赛初赛 解题报告
    【记录】Ubuntu下安装VirtualBox
    Ubuntu16.04 LTS下apt安装WireShark
    Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
    Ubuntu在wps-office等qt5程序下不能切换中文fcitx输入法的问题
    Ubuntu管理开机启动服务项 -- 图形界面的Boot-up Manager
    解决Ubuntu下Firefox+OpenJDK没有Java插件的问题
  • 原文地址:https://www.cnblogs.com/shanhm1991/p/9898680.html
Copyright © 2011-2022 走看看