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
- 21访问者模式
- <设计模式21>访问者模式
- 设计模式21-访问者模式
- 21、访问者模式(Visitor)
- 21、访问者模式(Visitor)
- 21、访问者模式(Visitor)
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 20命令模式
- 关于ios7 使用 GDataXml 解析 xml 数据的问题。
- asp.net 控件赋值的问题
- A1034. 孪生素数对
- webview调取相机
- 21访问者模式
- java中接口内的匿名内部类
- 22责任链模式
- Android Textview 点击之后更换背景 保持不变
- Python抢火车票成功后发送邮件
- 聊天界面返回到聊天列表如何设计
- uinavigationcontroller导航获取上级view出现unrecognized selector错误
- codeforces Good Bye 2016-C New Year and Rating(二分)
- 23迭代器模式