论坛首页 Java企业应用论坛

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

浏览 8507 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-01  
liusu 写道
silentlakeside 写道
另外建一个类,该类实现这些验证方法,然后ValidatableComposite和ValidatableDialog调用该类来实现IValidatable接口。

也就是最终还是要实现这些方法两遍?


不懂LZ的意思,这里实现方法的只有第3个类.
0 请登录后投票
   发表时间:2007-11-02  
不能使用抽象类么?
0 请登录后投票
   发表时间:2007-11-02  
10916621 写道
不能使用抽象类么?

我觉得抽象类就解决了
0 请登录后投票
   发表时间: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;
	}

}
0 请登录后投票
   发表时间:2007-11-02  
如daniel.wuz所言
使用组合,代替继承,将实际逻辑算法抽象到DefaultValidatable 类中,
派生类使用DefaultValidatable接口,这是Bridge模式:一组派生类(Composite等),使用一组实现(本例只有一个实现)。

这里体现了组合优于继承原则。
0 请登录后投票
论坛首页 Java企业应用版

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