设计模式Android知识Android开发

访问者模式

2017-05-16  本文已影响47人  程序员丶星霖

访问者模式

定义

访问者模式是一个相对简单的模式。封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

英文定义:Represent an operation to be performed on the elements of an object structure .

访问者模式的UML类图如下所示:

访问者模式.jpg

上图中涉及到的角色如下:

实例代码如下所示

//抽象元素
public abstract class Element{
    //定义业务逻辑
    public abstract void doSomething();
    //允许谁来访问
    public abstract void accept(IVisitor visitor);
}
//具体元素
public class ConcreteElement extends Element{
    //完善业务逻辑
    public void doSomething(){
        //业务逻辑
    }
    //允许哪个访问者访问
    public void accept(IVisitor visitor){
        visitor.visit(this);
    }
}
public class ConcreteElement2 extends Element{
    //完善业务逻辑
    public void doSomething(){
        //业务逻辑
    }
    //允许哪个访问者访问
    public void accept(IVisitor visitor){
        visitor.visit(this);
    }
}
//抽象访问者
public interface IVisitor{
    //可以访问哪些对象
    public void visit(ConcreteElement1 el1);
    public void visit(ConcreteElement2 el2);
}
//具体访问者
public class Visitor implements IVisitor{
    //访问el1元素
    public void visit(ConcreteElement1 el1){
        el1.doSomething();
    }
    //访问el2元素
    public void visit(ConcreteElement2 el2){
        el2.doSomething();
    }
}
//结构对象
public class ObjectStruture{
    //对象生成器,这里通过一个工厂方法模式模拟
    public static Element createElement(){
        Random rand = new Random();
        if(rand.nextInt(100)>50){
            return new ConcreteElement1();
        }else{
            return new ConcreteElement2();
        }
    }
}
//场景类
public class Client{
    public static void main(String[] args){
        for(int i=0;i<10;i++){
            //获得元素对象
            Element el = ObjectStruture.createElement();
            //接受访问者访问
            el.accept(new Visitor());
        }
    }
}

优缺点

优点:

缺点:

使用场景:

欢迎关注我的微信公众号。

我的微信公众号.jpg
上一篇 下一篇

猜你喜欢

热点阅读