让我用以下示例解释我的行为:
我有两个相似的地址类,具有三个相似的信息,但方法名称不同。
地址 - setNr,setCode,setStreetname, setHabitants
OtherAddress - setNumber,setPostalcode,setStreet, setSize
我正在使用一个地址类型的使用者,该使用者操纵“地址”元素的数据。
现在,我想对“ OtherAddress”使用相同的Consumer,因为必须对相似的方法执行相同的操作。
public class AddressManipulateConsumer implements Consumer<Address> {
@Override
public void accept(Address address) {
address.setNr("22");
address.setCode("12345");
address.setStreetname("examplestr.");
}
}
我的目的是避免重复该类:
public class AddressManipulateConsumer implements Consumer<OtherAddress> {
@Override
public void accept(OtherAddress address) {
address.setNumber("22");
address.setPostalcode("12345");
address.setStreet("examplestr.");
}
}
解决该问题的步骤或方法是什么?
答案 0 :(得分:0)
我建议执行以下步骤:
1)创建一个OtherAddresses
(“ OtherAddressAdapter
”)适配器,其功能名称类似于地址
2)创建具有这4个功能的父接口AddressWrapper
,并使OtherAddressAdapter
和Address
实现此接口
3)如下创建消费者:
public class AddressManipulateConsumer implements Consumer<AddressWrapper> {
答案 1 :(得分:0)
您可以将适配器用于OtherAddress
class OtherAddressAdaptor extends Address {
OtherAddress hiddenObject;
OtherAddressAdaptor(OtherAddress hiddenObject) {...}
@Override
void setNr(String number) {
this.hiddenObject.setNumber(number);
}
// do the same thing for other methods
}
现在,不要使用OtherAddress
对象,而是从它创建一个OtherAddressAdaptor
,然后使用它。
答案 2 :(得分:0)
为3种常见方法创建接口:
interface BasicAddress {
void setNumber(String number);
void setPostalcode(Stting code);
void setStreet(String street);
// getters too
}
使Address
和OtherAddress
实现BasicAddress
并重命名要对齐的当前方法。他们应该使用相同的名称,因为它们处理的是相同的概念。
让消费者接受BasicAddress
:
public class AddressManipulateConsumer implements Consumer<BasicAddress> {
@Override
public void accept(BasicAddress address) {
address.setNumber("22");
address.setPostalcode("12345");
address.setStreet("examplestr.");
}
}