读书人

举动型模式-访问者模式(Visitor)

发布时间: 2013-08-06 16:47:25 作者: rapoo

行为型模式--访问者模式(Visitor)

来看看原码:一个Visitor类,存放要访问的对象,

?

[java]?view plaincopy
  1. public?interface?Visitor?{??
  2. ????public?void?visit(Subject?sub);??
  3. }??
[java]?view plaincopy
  1. public?class?MyVisitor?implements?Visitor?{??
  2. ??
  3. ????@Override??
  4. ????public?void?visit(Subject?sub)?{??
  5. ????????System.out.println("visit?the?subject:"+sub.getSubject());??
  6. ????}??
  7. }??

Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性,

[java]?view plaincopy
  1. public?interface?Subject?{??
  2. ????public?void?accept(Visitor?visitor);??
  3. ????public?String?getSubject();??
  4. }??
[java]?view plaincopy
  1. public?class?MySubject?implements?Subject?{??
  2. ??
  3. ????@Override??
  4. ????public?void?accept(Visitor?visitor)?{??
  5. ????????visitor.visit(this);??
  6. ????}??
  7. ??
  8. ????@Override??
  9. ????public?String?getSubject()?{??
  10. ????????return?"love";??
  11. ????}??
  12. }??

测试:

[java]?view plaincopy
  1. public?class?Test?{??
  2. ??
  3. ????public?static?void?main(String[]?args)?{??
  4. ??????????
  5. ????????Visitor?visitor?=?new?MyVisitor();??
  6. ????????Subject?sub?=?new?MySubject();??
  7. ????????sub.accept(visitor);??????
  8. ????}??
  9. }??

输出:visit the subject:love

该模式适用场景:如果我们想为一个现有的类增加新功能,不得不考虑几个事情:1、新功能会不会与现有功能出现兼容性问题?2、以后会不会再需要添加?3、如果类不允许修改代码怎么办?面对这些问题,最好的解决方法就是使用访问者模式,访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦,

读书人网 >编程

热点推荐