java使用泛型重构多个重载方法
我有一个包含多个重载方法的类,例如:
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() );
}
}
我想让客户机类更通用,以便它将来可以处理任何类型的模型。但是,由于每个模型都有自己特定的公共方法,因此客户端。handle()方法需要根据给定的模型更改其行为。例如,如果给出了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() );
}
}
我正在考虑使用泛型,但我不确定泛型如何解决这个问题
请注意,客户机类具有依赖性(使用库)。模型必须是POJO,不依赖于任何其他类。因此,由于客户端的执行。handle()利用这些依赖项,方法不能在模型类中移动
有人能提供一些替代方案吗
# 1 楼答案
访客设计模式最适合你的问题。。。林克可以帮你 https://sourcemaking.com/design_patterns/visitor