java访问者模式学习总结

      访问者模式,自我感觉就相当于是从不同的方向去实现相同的问题,只不过使用访问者模式后,和一般写法导致的扩展能力正好相反。

      相当于将接口中原本应该存在的每一 个功能方法都变成了一个个的功能访问者。

      一般继承接口,实现所有接口方法:不同实现类的扩展容易,其中的方法扩展困难。

     访问者模式:不同实现类扩展困难,其中的方法扩展容易。

    一般情况下我们都是定义好接口,以及接口需要实现的所有方法,然后方法的具体实现就交给不同的实现类去实现。这样的话,新增不同

    的实现类非常容易,但是要扩展接口的方法就不是那么容易了,因为这样需要将所有实现类都重新实现新的接口方法。

     如果我们目前面临的情况是,我们的实现类一般情况下不需要变化扩展,但是里面的方法可能需要经常变化,这样,直接使用上面的实现

     模式就不太友好了。这时候,访问 者模 式就闪亮登场了。

     首先,为了好说明,我们先定义一个Person接口,有两个实现类BoyPerson,GirlPerson。有一个访问者接口Visitor。

     访问者模式的思路:在person接口中我们只需要定义一个方法,用来接收不同的访问者,然后将自身传给访问者。

                                         而我们在访问者的接口中,定义一个重载方法,方法名都是visit,但 是参数是person具体的实现类,注意,所有的

                                         实现类都要用这个visit方法列举一   遍,在这里就是BoyPerson,GirlPerson参数的两个重载方法。

     按理说,Person应该有自己的方法啊,例如:吃饭eat()方法,睡觉sleep()方法。但是,我们在Person中并没有定义这两个方法,我们

     要把这两个方法分别定义成两个访问者, 分别是吃饭访问者,睡觉访问者。然后在吃饭访问者中实现BoyPerson的吃饭功能和GrilPerson

     的吃饭功能,以及在睡觉访问者中实现BoyPerson的睡觉功能和 GrilPerson的睡觉功能。

     就这样,我们把原本应该定义的Person接口中的方法分别定义成了不同的访问者,如果我们还要为Person添加新的能力,只要新建对应

     功能的访问者就可以了。导致 新增方法变得很容易,但是这样,扩展不同的Person就变得困难了,因为这样要扩展黑人,白人等各种Person,

    我们就需要在所有的访问者中都添加一遍黑人,白人等各种Person的visit实现。

   

      友情链接:http://www.runoob.com/design-pattern/visitor-pattern.html

    

       这只是本人看了访问者模式的一点想法,如有不对的地方还请留言指正。

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值