java使用哪种设计模式(如果存在)?
我有一个关于OOP实现和设计模式的问题
我有一个固定的类模型,我不能更改它(因为它是在每次应用程序启动时自动生成的)。那里有许多类都有equals字段,如下面的示例所示:正如您所看到的,city
和streets
字段都包含在这两个类中
public class A{
String city;
String street;
String name;
....//get methods
}
public class B{
String city;
String street;
String age;
....//get methods
}
我需要从这两种类型的类中提取一个地址,我想用一个方法实现它(因为两次编写相同的代码似乎很愚蠢)。如果类模型是可变的,我可以添加一个新接口Addressable
,该接口A
和B
可以实现
public interface Addressable{
public String getStreet();
public String getCity();
}
//somewhere in code
public Address getAddress(Addressable addressable){
return new Address(addressable.getCity(), addressable.getStreet());
}
在没有接口和没有为不同类编码的情况下,实现相同功能最优雅的方法是什么
# 1 楼答案
如果您无法更改A或B,则必须使用降级的解决方案
一个简单且设计良好的解决方案当然依赖于一个接口,该接口定义了一个地址检索方法(
Address getAddress()
),该方法由A
和B
实现您还可以定义一个包装器类:
但是,如果必须为许多类复制这种代码,这可能会相当笨拙
此外,客户端将不再操作
A
,而是操作WrapperA
类它可能会破坏实际的客户端代码
因此,如果你想实现一个真正的适配器,这里也需要一个接口
如上所述,如果不重新设计最小值
A
或B
,真正好的解决方案是复杂的作为解决方法,您可以定义一个
Address
类,该类提供工厂方法来从A
或B
实例创建Address
然后使用这些方法根据需要创建地址
# 2 楼答案
我也遇到过类似的情况,类是在构建过程中生成的。(在我的例子中,构建过程将检查数据库,并为每个数据库表生成一个包含所有字段的类。)
您声明这些类是在应用程序启动时生成的。如果它们是在构建过程中生成的,您可以向构建过程中添加一个额外的元素,以更改生成的文件。在我的例子中,我们的构建服务器只是Linux,所以我在
ant
脚本中添加了一行sed
# 3 楼答案
您可以编写adapters来提供一个公共接口
然后使用适配器类进行进一步处理