设计模式之---访问者模式

来源:互联网 发布:21端口是tcp 编辑:程序博客网 时间:2024/06/03 16:41

package visitor;public interface IVisitor {void visit(Element element);  }
package visitor;public abstract class Element {public abstract void accept(IVisitor visitor);      public abstract void doSomething();}
package visitor;public class Visitor implements IVisitor {@Overridepublic void visit(Element element) {// TODO Auto-generated method stubSystem.out.println("对element中的数据进行操作");element.doSomething();}}
package visitor;public class ConcreteElement0 extends Element {@Overridepublic void accept(IVisitor visitor) {// TODO Auto-generated method stubvisitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离}@Overridepublic void doSomething() {// TODO Auto-generated method stubSystem.out.println("这是元素0的方法");}}
package visitor;public class ConcreteElement1 extends Element {@Overridepublic void accept(IVisitor visitor) {// TODO Auto-generated method stubvisitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离}@Overridepublic void doSomething() {// TODO Auto-generated method stubSystem.out.println("这是元素1的方法");}}
package visitor;import java.util.ArrayList;import java.util.List;import java.util.Random;public class ObjectStruture {public static List<Element> getList(){          List<Element> list = new ArrayList<Element>();          Random ran = new Random();          for(int i=0; i<10; i++){              int a = ran.nextInt(100);              if(a>50){                  list.add(new ConcreteElement0());            }else{                  list.add(new ConcreteElement1());              }          }          return list;      }  }
package visitor;import java.util.List;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubList<Element> list = ObjectStruture.getList();          for(Element e: list){              e.accept(new Visitor());          }  }}
简单说一下单分派和多分派

访问者模式的优点

访问者模式的适用场景

最后还是强调一点,不要为了用设计模式而用设计模式。当真正需要时才用,这才是运用设计模式的正确姿势。

1 0
原创粉丝点击