访问者模式

总结:

1.访问者模式包含两大类:对象 和 行为;对象和行为的名字看客们可以随便起。

2.对象必须稳定

3.行为可以多变;这就是访问者模式的优点,增加一个行为很容易,遵循对扩展开发,对修改关闭的原则

4.对象中抽象一个接受行为的方法,暂且叫做accept方法,参数为行为。accepte(Action action)

5.行为中抽象 N 个方法操作对象。N=对象的个数;这也正是为什么需要对象稳定的原因,对象不稳定,则行为中的方法就不固定了

6.对象的抽象方法参数为行为,可以控制过滤行为,可以调用行为定义的方法

7.行为的抽象方法参数为具体的对象,可以针对具体的对象执行具体的业务逻辑

建模图:

Element就是对象,visitor就是行为;

暂且定义对象为People  行为对象为Action

对象的接口定义

interface  People{ void accept(Action action) ;}

对象的具体实现类  男人 女人

class Man implements People{ void accept(Action action){action.do(this)}}

class Woman implements People{void accept(Action action){action.do(this)}}

行为的接口定义

interface Action{ void do(Man man);   void do(Woman woman);}       也可以变种为 void do(People p);

行为的具体实现类 吃的操作

class Eat implements Action{ void do(Man man){System.out.pring("man eat meat")}    void do(Woman){System.out.pring("Woman eat except meat")}}

还有很多,可以自行添加

class ..... implements Action{.....}

将对象和行为结合在一起,集中管理。增加添加和删除对象的方法,遍历对象传入行为,得到所有对象对于行为的处理方式

class Manage{ List<People> peoples ; 

                          void attach(People p){people.add(p)}

                         void detach(People){people.remove(p)}

                          void show(Action action){for(People p:peoples){p.accept(action)}}

}

上述中,对于增加行为而言,只需要继承行为接口Action,实现两个具体的方法即可。其它代码逻辑不用动。

比如 新增行为 Sleep 

class Sleep implements Action{ void do(Man man){.....}   void do(Woman woman) {.....}}

new Manage().show(Sleep)  即可出现对象对于睡觉Sleep的行为的处理方式;

读者如果还不懂,推荐一个针对访问者写的不错的链接https://blog.csdn.net/chenssy/article/details/12029633

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值