精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-01
liusu 写道 silentlakeside 写道 另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。
也就是最终还是要实现这些方法两遍? 不懂LZ的意思,这里实现方法的只有第3个类. |
|
返回顶楼 | |
发表时间:2007-11-02
不能使用抽象类么?
|
|
返回顶楼 | |
发表时间:2007-11-02
10916621 写道 不能使用抽象类么?
我觉得抽象类就解决了 |
|
返回顶楼 | |
发表时间:2007-11-02
忘了模式名了
接口: public interface IValidatable { public boolean isValid(); public void computeValid(); //以下三个方法在子类中的实现是一样的 public void addValidator(IInputValidator validator); public List<IInputValidator> getValidators(); public void addValidators(IInputValidator[] validators); } 标准实现: public class DefaultValidatable implements IValidatable { @Override public void addValidator(IInputValidator validator) { } @Override public void addValidators(IInputValidator[] validators) { } //实现三个方法 @Override public void computeValid() { System.out.println("say hi to every one"); } @Override public List<IInputValidator> getValidators() { return null; } @Override public boolean isValid() { return false; } } Composite: public class Composite extends Component implements IValidatable { private IValidatable defaultvalidate = null; public Composite(){ this(new DefaultValidatable()); } public Composite(IValidatable defaultvalidate){ this.defaultvalidate = defaultvalidate; } @Override public void addValidator(IInputValidator validator) { } @Override public void addValidators(IInputValidator[] validators) { //委派给标准实现 defaultvalidate.addValidators(validators); } @Override public void computeValid() { // TODO Auto-generated method stub } @Override public List<IInputValidator> getValidators() { // TODO Auto-generated method stub return null; } } |
|
返回顶楼 | |
发表时间:2007-11-02
如daniel.wuz所言
使用组合,代替继承,将实际逻辑算法抽象到DefaultValidatable 类中, 派生类使用DefaultValidatable接口,这是Bridge模式:一组派生类(Composite等),使用一组实现(本例只有一个实现)。 这里体现了组合优于继承原则。 |
|
返回顶楼 | |