浏览 2846 次
锁定老帖子 主题:如何重用实现类中的共用方法?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-24
我的类结构的这样的. public interface CommonUploadService { public void add(List excelDatalist); public List sameList(List excelDatalist) throws UploadException; public void deleteSame(List excelDataList); public void setLog(String userName,String fileName) throws UploadException; }
public interface CityDayService extends CommonUploadService{ public List findByCityAndDate(String city,Date date); }
public interface ZhbTCityDayForecastService extends CommonUploadService { public List findByCityAndDate(String city, Date date); } 其中,CommonUploadService 中setLog方法,在CityDayService 实现类和ZhbTCityDayForecastService 实现类是一样的.如何调整结构,能重用 setLog方法.我想继承一个BaseService,它里面写setLog方法,来达到重用.但又不知道写到哪里? 我的结构图的这样的. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-24
看看这样行不行,可能还没完全理解你的意思:
public abstract class BaseService implements CommonUploadService { public void setLog(String userName,String fileName) throws UploadException { //doSomething } } //假设你的实现类如下名字: public class Impl extends BaseService implements CityDayService, ZhbTCityDayForecastService { public void someMethod() { super.setLog();//这样不就行了么? } //... } |
|
返回顶楼 | |
发表时间:2008-04-24
public interface CityDayService extends BaseService{
} 怕是不行吧. |
|
返回顶楼 | |
发表时间:2008-04-24
sclsch 写道 public interface CityDayService extends BaseService{
} 怕是不行吧. 可以的,interface继承interface当然是extends关键字。 |
|
返回顶楼 | |
发表时间:2008-04-24
你BaseService是interface吗?
如果是BaseService是不可以用实际方法的. |
|
返回顶楼 | |
发表时间:2008-04-24
同意2楼!
|
|
返回顶楼 | |
发表时间:2008-04-24
sclsch 写道 你BaseService是interface吗?
如果是BaseService是不可以用实际方法的. 是你说要重用的,我才这么帮你设计的:abstract class BaseService 这样你的各个子类就能继承这个BaseService,如果你要这个BaseService是interface,那这个interface岂不是和CommonUploadService一样了,可能你描述你的需求不明确,我还不是很明白你到底要的什么效果,你最好举个具体的例子吧。 |
|
返回顶楼 | |
发表时间:2008-04-24
sclsch 写道 public interface CityDayService extends BaseService{
} 怕是不行吧. 哦,终于明白了,你是想CityDayService extends BaseService,问题是这样为了什么呢,不是已经CityDayService extends CommonUploadService了么,CommonUploadService不就是你说的BaseService,所以我说我还是不明白你真正的意图。 |
|
返回顶楼 | |
发表时间:2008-04-24
我的意思是
InterfaceA extends InterfaceCommon InterfaceB extends InterfaceCommon ImplA implements InterfaceA ImplB implements InterfaceB 这样一个结构. 其中ImplA 实现 InterfaceCommon setLog方法 ImplB 实现 InterfaceCommon setLog方法 但这两个方法是一致的,没有区别,所以想要重用setLog方法. 我想出一个办法 ImplA extends abstractClassA abstractClassA extends abstractBaseCommon abstractBaseCommon extends abstractCommon 在abstractBaseCommon中定义setlog方法. ImplA 和ImplB就可以重用了. 但改动太大,沉得没有必要了. 有关方法可以参考下面,就知道我的意图了. http://blog.csdn.net/suncheng_hong/archive/2008/04/20/2309940.aspx |
|
返回顶楼 | |
发表时间:2008-04-25
不好意思太长了,没时间看。你画个UML图可以更清楚点,从你讲的大概来说,和我最先的回帖差不多啊,不知道你用三个abstract class的用意。可能是各有不同的概念抽象把,你肯定要决定setLog的实现放在某个abstract class里面,OO框架下没有其他什么好办法,除非考虑AOP,走其他途径来减少基础设施代码。
|
|
返回顶楼 | |