美文网首页
设计模式-访问者模式

设计模式-访问者模式

作者: IAmWhoAmI | 来源:发表于2016-07-28 09:29 被阅读17次

    4.访问者模式

    其实就是自己是参数,被调用。

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    abstract class Element{
        public abstract void accept(IVisitor visitor);
        public abstract void doSomething();
    }
    class ConcreteElement1 extends Element{
    
        @Override
        public void accept(IVisitor visitor) {
            visitor.visit(this);
        }
    
        @Override
        public void doSomething() {
            System.out.println("element 1");
        }
    }
    class ConcreteElement2 extends Element{
        @Override
        public void accept(IVisitor visitor) {
            visitor.visit(this);
        }
    
        @Override
        public void doSomething() {
            System.out.println("element 2");
        }
    }
    
    class Visotor implements IVisitor{
        @Override
        public void visit(ConcreteElement1 el1) {
            el1.doSomething();
        }
    
        @Override
        public void visit(ConcreteElement2 el2) {
            el2.doSomething();
        }
    }
    
    
    interface IVisitor{
        public void visit(ConcreteElement1 el1);
        public void visit(ConcreteElement2 el2);
    }
    class ObjectStructure{
        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 ConcreteElement1());
                }else{
                    list.add(new ConcreteElement2());
                }
            }
            return list;
        }
    }
    public class VisitorTest {
        public static void main(String[] args){
            List<Element> list = ObjectStructure.getList();
            for(Element e:list){
    //            e.doSomething();
    //           fun(e);
                e.accept(new Visotor());
    #我的理解是,方便修改,其实直接带源码中的循环部分修改对e的使用也可以
    #更优秀的方式是用个函数包起来
    #更优秀的方式是,使用visitor模式,这样只要实现不同的类就行了无需大的修改。
    
            }
        }
        public static void fun(Element e){
            e.doSomething();
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式-访问者模式

          本文链接:https://www.haomeiwen.com/subject/yewojttx.html