2

我有一个基于接口的现有设计,该接口公开了一个 API 方法,该方法当前返回 void。并且有许多不同的实现类实现了这个接口。但是,现在我想进行更改,以便这些实现中很少有返回对象。明显的解决方案似乎是:让所有实现都返回“对象”,并期望在不需要的地方忽略返回的值。但是对于这种重构是否有更清洁和更好的解决方案?

是否有任何可以在这里应用的设计模式可以使设计更好,以防我必须对所有现有实现进行更改,无论是否需要。

下图:

//the interface
public interface CommonInterface{
    public void commonMethod();   //this is where I want to change the return type 
                                      //to 'Object' for some of the implementations
}

//the factory
public CommonInterface getImplInstance() {

     CommonInterface implInstance = instance; //logic to return corresponding instance
     return implInstance;
    }

//the implementation (there are multiple implemenations like this)
public class Impl1 implements CommonInterface {
   public void commonMethod() {
     //some logic
   }
}
4

1 回答 1

2

一种选择是创建一个新接口 CommonInterface2,它实现了新方法。这需要对“少数这些实现”而不是“许多实现类”进行更改。

  public interface CommonInterface2 extends CommonInterface {
      public Object commonMethodAndReturn(); 
  }

仅在返回对象的实现子集中实现此功能。

 public class OneOfTheFew implements CommonInterface2 { ... }
 public class OneOfTheMany implements CommonInterface { ... }

仅在需要返回值的情况下测试新接口。

 public void foo( CommonInterface ci ) {
    if ( ci instanceof CommonInterface2 ) {
        CommonInterface2 ci2 = (CommonInterface2) ci;
        ...
    }
 }
于 2013-04-22T18:23:57.420 回答