访问者模式——HeadFirst设计模式学习笔记

访问者模式:为某个对象组合添加新功能,而又不改变组合的内部结构

  • Visitor抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口
  • ConcreteVisitor具体访问者角色,实现Visitor声明的接口
  • Element定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为参数
  • ConcreteElement具体元素,实现了抽象元素(Element)所定义的接受操作接口
  • ObjectStructure结构对象角色,这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素

 

特点:

  • 元素类可以通过接受不同的访问者来实现对不同操作的扩展
  • 将和本对象相关性较低的操作封装到访问者中,对访问者对对象组合都符合单一职责原则
  • 适用于变化性较低的对象组合

 

举例:

 1 abstract class Element {  
 2     public abstract void accept(IVisitor visitor);  
 3     public abstract void doSomething();  
 4 }  
 5   
 6 interface IVisitor {  
 7     public void visit(Element e);  
 8 }  
 9   
10 class ConcreteElement extends Element {  
11     public void doSomething(){  
12         System.out.println("这是元素");  
13     }  
14       
15     public void accept(IVisitor visitor) {  
16         visitor.visit(this);  
17     }  
18 }  
19 
20 class Visitor implements IVisitor {  
21   
22     public void visit(Element e) {  
23         e.doSomething();  
24     }  
25 }  
26   
27 
28 public class Client {  
29     public static void main(String[] args){  
30         List<Element> list = ObjectStruture.getList();  
31         for(Element e: list){  
32             e.accept(new Visitor());  
33         }  
34     }  
35 } 

 

posted @ 2016-11-09 23:47  HectorHou  阅读(322)  评论(0编辑  收藏  举报