如何修改使用者,使其可以处理类似的对象?

时间:2018-07-10 13:56:46

标签: java

让我用以下示例解释我的行为:

我有两个相似的地址类,具有三个相似的信息,但方法名称不同。

地址  - 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.");
        }

 }

解决该问题的步骤或方法是什么?

3 个答案:

答案 0 :(得分:0)

我建议执行以下步骤:

1)创建一个OtherAddresses(“ OtherAddressAdapter”)适配器,其功能名称类似于地址

2)创建具有这4个功能的父接口AddressWrapper,并使OtherAddressAdapterAddress实现此接口

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
}

使AddressOtherAddress实现BasicAddress并重命名要对齐的当前方法。他们应该使用相同的名称,因为它们处理的是相同的概念。

让消费者接受BasicAddress

public class AddressManipulateConsumer implements Consumer<BasicAddress> {
    @Override
    public void accept(BasicAddress address) {
        address.setNumber("22");
        address.setPostalcode("12345");
        address.setStreet("examplestr.");
    }
 }