访问者模式
/**
* 访问者模式:
* 表示一个作用于某对象结构中的各元素的操作.
* 它使你可以在不改变各个元素的前提下定义作用于这些元素的新动作;
*
* 应用了双分派的技术,
* 首先在客户端 man.accpet(具体状态);
* 然后"man调用了 具体状态.get(this)
*
* 作用:
* 新增action类时不需要需改缘由代码,负责开放-封闭原则
*
* 例子:
* 接口回调
*/
结构图
范例
性别差异范例
public abstract class Action {
abstract void get (Man man);
abstract void get (Women women);
}
public interface Person {
void accept(Action action);
}
public class Success extends Action {
@Override
void get(Man man) {
Log.d("meee" ,"--成功男人的背后多半有一个伟大的女人" );
}
@Override
void get(Women women) {
Log.d("meee" ,"--成功女人的背后多半有一个失败的女人" );
}
}
public class Fail extends Action {
@Override
void get(Man man) {
Log.d("meee" ,"--男人失败时:闷头喝酒,谁也不用劝" );
}
@Override
void get(Women women) {
Log.d("meee" ,"--女人失败时:谁劝也没用" );
}
}
public class Women implements Person {
@Override
public void accept (Action action) {
action.get(this );
}
}
public class Man implements Person {
@Override
public void accept (Action action) {
action.get(this );
}
}
Success success = new Success();
Fail fail = new Fail();
Women women = new Women();
Man man = new Man();
women.accept(success);
man.accept(success);
women.accept(fail);
man.accept(fail);