当前位置:编程学习 > JAVA >>

关于instanceof使用的问题

举个例子
ABCDEFG七个类,ABC是一种点,DE是一种线,FG是面
BaseDao,save方法需要更新坐标,大家都知道,更新点类的坐标,线类的坐标,面类的坐标,方法坑定是大不相同的。
下面问题来了,两种方式:
1. 在save方法中,用instanceof判断是点线面,用不同的方法处理。
2. 点Dao,线Dao,面Dao,继承baseDao重写save方法
从oo的角度来说,肯定是2更符合规范,但是显然1要简单的多
大家有什么想法么? --------------------编程问答-------------------- 以后有别的Dao,那save方法里不就一堆instanceof悲剧了。还是用第2种吧,起码不同的保存逻辑都在各自的代码里,不放到Base里去 --------------------编程问答-------------------- 建议LZ用第二种吧,直接面向接口来编程! --------------------编程问答--------------------
引用 2 楼 xingfuzhuzi1314 的回复:
建议LZ用第二种吧,直接面向接口来编程!


支持。 应该是 一个DAO接口。  点DaoImpl,线DaoImpl,面DaoImpl   --------------------编程问答--------------------
引用 3 楼 tangwei070 的回复:
引用 2 楼 xingfuzhuzi1314 的回复:建议LZ用第二种吧,直接面向接口来编程!
支持。 应该是 一个DAO接口。  点DaoImpl,线DaoImpl,面DaoImpl

是应该这样的,统一的DAO接口定义save方法,然后不同的类传进去,直接调用XXXDAOImpl.save()就可以了。
详细可以百度一下:使用策略模式代替switch语句。
相当于在多种不同的状态下的切换! --------------------编程问答-------------------- 楼主可以看看策略模式和状态模式:
当DAO类多了,不同的DAO只是相当于一个策略,不同策略之间互不干扰,可以方便修改和添加!
如果需要多加一个面DAO,只需要重新定义一个类就可以了,原来的代码都不用修改,来实灵活的组合! --------------------编程问答--------------------
引用 1 楼 zlss_17 的回复:
以后有别的Dao,那save方法里不就一堆instanceof悲剧了。还是用第2种吧,起码不同的保存逻辑都在各自的代码里,不放到Base里去

谢谢楼上的回复,忘了说一下我举例子的初衷了,我纠结的是,点,线,面,本身并不多,不可能再有另一种基类了,这样instanceof也不会再涨了,类似这样的需求,用instanceof是不是更简单一些。
不过看起来方法2好一些,我个人也侵向方法2,但是,目测好像用方法1已经出问题了。 --------------------编程问答-------------------- 如果点,线,面类型数量已经基本固定,那可以考虑进一步约束
线类继承点类,面类继承线类

Point => Line => Plane

各concrete dao中也就可以用带参的统一接口 save(Point p) --------------------编程问答--------------------
引用 7 楼 dracularking 的回复:
如果点,线,面类型数量已经基本固定,那可以考虑进一步约束
线类继承点类,面类继承线类

Point => Line => Plane

各concrete dao中也就可以用带参的统一接口 save(Point p)

错了,不应该这样,重复设计了 --------------------编程问答-------------------- 面向接口  反射 --------------------编程问答--------------------
引用 6 楼 jack460 的回复:
引用 1 楼 zlss_17 的回复:以后有别的Dao,那save方法里不就一堆instanceof悲剧了。还是用第2种吧,起码不同的保存逻辑都在各自的代码里,不放到Base里去
谢谢楼上的回复,忘了说一下我举例子的初衷了,我纠结的是,点,线,面,本身并不多,不可能再有另一种基类了,这样instanceof也不会再涨了,类似这样的需求,用instanceof是不是更简单……
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,