精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-30
最后修改:2009-02-25
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重复实现那三个方法? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-30
父类B实现接口A,子类CD继承父类B,这样不可以么.愚见!
|
|
返回顶楼 | |
发表时间:2007-10-30
定义一个Composite,Dialog的共通抽象父类实现接口中的三个方法。
|
|
返回顶楼 | |
发表时间:2007-10-30
Composite,Dialog是SWT库中的类,我只能使用不能对其进行更改.
其实就是这样: 我的 ValidatableComposite extends Compsite implements IValidatable ,同样 ValidatableDialog extends Dialog implements IValidatable 这样ValidatableComposite和ValidatableDialog就没有办法同时继承另外一个AbstractValidatable 类了. |
|
返回顶楼 | |
发表时间:2007-10-30
可惜Java只能单继承,貌似做不到
|
|
返回顶楼 | |
发表时间:2007-10-30
另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。
|
|
返回顶楼 | |
发表时间:2007-10-30
silentlakeside 写道 另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。
也就是最终还是要实现这些方法两遍? |
|
返回顶楼 | |
发表时间:2007-10-30
建议看看head first设计模式此书,第一章就可以解决此问题了!
|
|
返回顶楼 | |
发表时间:2007-10-31
新建一个类实现这三个方法,并将其引入到ValidatableComposite和ValidatableDialog中。
|
|
返回顶楼 | |
发表时间:2007-10-31
IValidatable中extract一个IValidatorList接口,定义一个DefaultValidatorList派生于IValidatorList,实现公用的代码部分。
ValidatableComposite和ValidatableDialog通过代理模式使用DefaultValidatorList实现IValidatable中对应的接口。 |
|
返回顶楼 | |