论坛首页 Java企业应用论坛

两个类实现同一个接口如何共享某些方法的实现?

浏览 8480 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-30   最后修改:2009-02-25
OO
这个设计具体该如何实现?当前有一个接口IValidatable和两个需要实现这个接口的类Composite,Dialog

public interface IValidatable{
   public boolean isValid();
   public void computeValid();
   public void addValidator(IInputValidator validator);
   public List<IInputValidator> getValidators();
   public void addValidators(IInputValidator[] validators);
}


现在在一个GUI(SWT)程序的设计中有两种类型的对象需要实现这个接口,
一个是Composite的扩展类ValidatableComposite,
一个是Dialog的扩展类ValidatableDialog(Composite and Dialog都非接口而是实际类).

假定这两个类内部对
public void addValidator(IInputValidator validator);
public List<IInputValidator> getValidators();
public void addValidators(IInputValidator[] validators);
三个方法的的实现是一致的.

请问有什么办法可以避免在ValidatableComposite和ValidatableDialog重复实现那三个方法?
   发表时间:2007-10-30  
父类B实现接口A,子类CD继承父类B,这样不可以么.愚见!
0 请登录后投票
   发表时间:2007-10-30  
定义一个Composite,Dialog的共通抽象父类实现接口中的三个方法。
0 请登录后投票
   发表时间:2007-10-30  
Composite,Dialog是SWT库中的类,我只能使用不能对其进行更改.

其实就是这样:
我的
ValidatableComposite extends Compsite implements IValidatable

,同样
ValidatableDialog extends Dialog implements IValidatable

这样ValidatableComposite和ValidatableDialog就没有办法同时继承另外一个AbstractValidatable 类了.
0 请登录后投票
   发表时间:2007-10-30  
可惜Java只能单继承,貌似做不到
0 请登录后投票
   发表时间:2007-10-30  
另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。
0 请登录后投票
   发表时间:2007-10-30  
silentlakeside 写道
另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。

也就是最终还是要实现这些方法两遍?
0 请登录后投票
   发表时间:2007-10-30  
建议看看head first设计模式此书,第一章就可以解决此问题了!
0 请登录后投票
   发表时间:2007-10-31  
新建一个类实现这三个方法,并将其引入到ValidatableComposite和ValidatableDialog中。
0 请登录后投票
   发表时间:2007-10-31  
IValidatable中extract一个IValidatorList接口,定义一个DefaultValidatorList派生于IValidatorList,实现公用的代码部分。
ValidatableComposite和ValidatableDialog通过代理模式使用DefaultValidatorList实现IValidatable中对应的接口。
0 请登录后投票
论坛首页 Java企业应用版

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