论坛首页 Java企业应用论坛

如何重用实现类中的共用方法?

浏览 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方法,来达到重用.但又不知道写到哪里?

 我的结构图的这样的.

  • 大小: 576.1 KB
   发表时间: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();//这样不就行了么?
    }
    //...
}
0 请登录后投票
   发表时间:2008-04-24  
public interface CityDayService extends BaseService{
}
怕是不行吧.
0 请登录后投票
   发表时间:2008-04-24  
sclsch 写道
public interface CityDayService extends BaseService{
}
怕是不行吧.

可以的,interface继承interface当然是extends关键字。
0 请登录后投票
   发表时间:2008-04-24  
你BaseService是interface吗?
如果是BaseService是不可以用实际方法的.
0 请登录后投票
   发表时间:2008-04-24  
同意2楼!
0 请登录后投票
   发表时间:2008-04-24  
sclsch 写道
你BaseService是interface吗?
如果是BaseService是不可以用实际方法的.

是你说要重用的,我才这么帮你设计的:abstract class BaseService
这样你的各个子类就能继承这个BaseService,如果你要这个BaseService是interface,那这个interface岂不是和CommonUploadService一样了,可能你描述你的需求不明确,我还不是很明白你到底要的什么效果,你最好举个具体的例子吧。

0 请登录后投票
   发表时间:2008-04-24  
sclsch 写道
public interface CityDayService extends BaseService{
}
怕是不行吧.

哦,终于明白了,你是想CityDayService extends BaseService,问题是这样为了什么呢,不是已经CityDayService extends CommonUploadService了么,CommonUploadService不就是你说的BaseService,所以我说我还是不明白你真正的意图。
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2008-04-25  
不好意思太长了,没时间看。你画个UML图可以更清楚点,从你讲的大概来说,和我最先的回帖差不多啊,不知道你用三个abstract class的用意。可能是各有不同的概念抽象把,你肯定要决定setLog的实现放在某个abstract class里面,OO框架下没有其他什么好办法,除非考虑AOP,走其他途径来减少基础设施代码。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics