gpt4 book ai didi

java - 使用泛型重构多个重载方法

转载 作者:行者123 更新时间:2023-12-02 04:24:03 24 4
gpt4 key购买 nike

我有一个包含多个重载方法的类,例如:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com