21访问者模式

来源:互联网 发布:2017年旅游大数据分析 编辑:程序博客网 时间:2024/06/08 11:03

访问者模式  (最复杂的)

<设计模式其实很简单>笔记


①定义:

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。


②代码:
//抽象访问者,声明访问者可以访问哪些元素public abstract class Visitor{public abstract void VisitConcreteElementA(ConcreteElementA concreteElementA);public abstract void VisitConcreteElementB(ConcreteElementA concreteElementB);}//具体的访问者类public  class ConcreteVisitor extends Visitor{//覆盖父类的抽象方法@Override//访问构件Apublic void VisitConcreteElementA(ConcreteElementA concreteElementA){System.out.println(concreteElementA.getClass().getCanonicalName() + "被" + this.getClass().getCanonicalName() + "访问");}@Override//访问构件Bpublic void VisitConcreteElementB(ConcreteElementB concreteElementB){System.out.println(concreteElementB.getClass().getCanonicalName() + "被" + this.getClass().getCanonicalName() + "访问");}}//抽象元素类public abstract class Element{//抽象的接受访问方法public abstract void Accept(Visitor visitor);}//具体的元素Apublic class ConcreteElementA extends Element{//覆盖父类抽象方法@Override//接受访问方法public void Accept(Visitor visitor){visitor.VisitConcreteElementA(this);}//操作Apublic void OperationA(){ }}//具体的元素Bpublic class ConcreteElementA extends Element{//覆盖父类抽象方法@Override//接受访问方法public void Accept(Visitor visitor){visitor.VisitConcreteElementB(this);}//操作Bpublic void OperationA(){ }}//结构对象类, 对访问进行控制的管理者public class ObjectStructure{private List<Element> elements = new ArrayList<Element>();public void Attach(Element element){elements.add(element);}public void Detach(Element element){elements.remove(element);}//接受访问方法public void Accept(Visitor visitor){for(int i = 0 ; i<elements.size() ; i++){(elements.get(i)).Accept(visitor);}}}//客户端public static void main(String[] args){ObjectStructure objtStru = new ObjectStructure();objtStru.Attach(new ConcreteElementA());objtStru.Attach(new ConcreteElementB());ConcreteVisitor concreteVisitor = new ConcreteVisitor();objtStru.Accept(concreteVisitor);}//访问者模式适合数据结构相对稳定的系统,访问者模式的目的是将对数据的处理从数据结构中分离出来。


③适用的地方:
当一个对象结构包含有很多类对象,但是它们有不同的接口,并且开发人员希望对这些对象实施一些依赖于具体类的操作时。
当需要对一个对象结构中的对象进行很多不同的并且不相关的操作时。
当该对象结构被很多应用共享时。
0 0
原创粉丝点击