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

xiaoxiao2021-02-28  111

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 { @Override public void visit(Element element) { // TODO Auto-generated method stub System.out.println("对element中的数据进行操作"); element.doSomething(); } } package visitor; public class ConcreteElement0 extends Element { @Override public void accept(IVisitor visitor) { // TODO Auto-generated method stub visitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离 } @Override public void doSomething() { // TODO Auto-generated method stub System.out.println("这是元素0的方法"); } } package visitor; public class ConcreteElement1 extends Element { @Override public void accept(IVisitor visitor) { // TODO Auto-generated method stub visitor.visit(this); //这是关键 利用双分派技术实现处理与数据结构的分离 } @Override public void doSomething() { // TODO Auto-generated method stub System.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 stub List<Element> list = ObjectStruture.getList(); for(Element e: list){ e.accept(new Visitor()); } } } 简单说一下单分派和多分派:

访问者模式的优点:

访问者模式的适用场景:

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

转载请注明原文地址: https://www.6miu.com/read-38783.html

最新回复(0)