我有一个包含多个重载方法的类,例如:
interface SharedInterface
{
public void commonMethod();
}
class Model1 implements SharedInterface
{
public void commonMethod(){}
public int foo(){ return 1; }
}
class Model2 implements SharedInterface
{
public void commonMethod(){}
public String bar(){ return "2"; }
}
class Client
{
private ExternalClass external = new ExternalClass();
public void handle( Model1 model )
{
external.calculate( model.foo() );
}
public void handle( Model2 model )
{
external.calculate( model.bar() );
}
}
我想让 Client 类更加通用,以便它将来可以处理任何类型的 Model。但是,由于每个 Model 都有自己特定的公共(public)方法,因此 Client.handle() 方法需要根据给定的 Model 来更改其行为。例如,如果给定 Model1 实例,则调用该模型的方法 foo() ;如果给定了 Model2 实例,则调用方法 bar() 等。将来会创建更多类型的模型。下面的解决方案打破了开闭原则,看起来是一个非常糟糕的做法:
class Client
{
private ExternalClass external = new ExternalClass();
public void handle( SharedInterface model )
{
if( model instanceof Model1 )
external.calculate( model.foo() );
else if( model instanceof Model2 )
external.calculate( model.bar() );
}
}
我正在考虑使用泛型,但我不确定泛型如何解决这个问题。
请注意,Client 类具有依赖项(使用库)。模型必须是 POJO,不依赖于任何其他类。因此,由于 Client.handle() 的实现利用了这些依赖项,因此该方法无法移动到 Model 类内部。
有人可以提供一些替代方案吗?
最佳答案
访客设计模式最适合您的问题...链接可以帮助您解决问题 https://sourcemaking.com/design_patterns/visitor ..
关于java - 使用泛型重构多个重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412595/