举个例子
ABCDEFG七个类,ABC是一种点,DE是一种线,FG是面
BaseDao,save方法需要更新坐标,大家都知道,更新点类的坐标,线类的坐标,面类的坐标,方法坑定是大不相同的。
下面问题来了,两种方式:
1. 在save方法中,用instanceof判断是点线面,用不同的方法处理。
2. 点Dao,线Dao,面Dao,继承baseDao重写save方法
从oo的角度来说,肯定是2更符合规范,但是显然1要简单的多
大家有什么想法么?

解决方案 »

  1.   

    以后有别的Dao,那save方法里不就一堆instanceof悲剧了。还是用第2种吧,起码不同的保存逻辑都在各自的代码里,不放到Base里去
      

  2.   


    支持。 应该是 一个DAO接口。  点DaoImpl,线DaoImpl,面DaoImpl  
      

  3.   

    是应该这样的,统一的DAO接口定义save方法,然后不同的类传进去,直接调用XXXDAOImpl.save()就可以了。
    详细可以百度一下:使用策略模式代替switch语句。
    相当于在多种不同的状态下的切换!
      

  4.   

    楼主可以看看策略模式和状态模式:
    当DAO类多了,不同的DAO只是相当于一个策略,不同策略之间互不干扰,可以方便修改和添加!
    如果需要多加一个面DAO,只需要重新定义一个类就可以了,原来的代码都不用修改,来实灵活的组合!
      

  5.   

    谢谢楼上的回复,忘了说一下我举例子的初衷了,我纠结的是,点,线,面,本身并不多,不可能再有另一种基类了,这样instanceof也不会再涨了,类似这样的需求,用instanceof是不是更简单一些。
    不过看起来方法2好一些,我个人也侵向方法2,但是,目测好像用方法1已经出问题了。
      

  6.   

    如果点,线,面类型数量已经基本固定,那可以考虑进一步约束
    线类继承点类,面类继承线类Point => Line => Plane各concrete dao中也就可以用带参的统一接口 save(Point p)