OOP 设计:如果大多数子类都有,是否可以将不常见的方法放在父类中



有 10 个类有方法 orderId(),2 个没有。

所有消息都是名为 Message 的类的子类。

父类是否仍Messages具有在一个位置实现该逻辑的setOrderId(String value)方法?

我的问题是,如果我不这样做,那么我将不得不使用具体的类来使用该方法!

如果你在公共超类上实现setOrderId(),那么结果,所有子类都具有该属性(即使有些子类不提供getter)。 如果这是不合适/不合适的,那么不,这不是好的设计。

我的问题是,如果我不这样做,那么每次我想使用该方法时,如果编程到接口,我都需要子类化!

也许您需要一个大多数子类实现的接口,或者为它们提供一个中间超类,它提供setOrderId()方法,并且可能也orderId()。 将对象传递给希望能够访问 orderId 属性的方法时,请使用将其作为参数类型提供的公共接口或类。

创建具有所有常用方法的抽象类(AbstractMessage),创建具有orderId()方法的子类(OrderMessage),创建另一个没有此方法的子类(Message)。

您可以在父类中实现 setOrderld(),然后在没有 setOrderld() 的对象中重写该方法以不执行任何操作。然后,您必须记住覆盖不使用它的对象。

Messages 类

可以具有默认的 setOrderId(String value) 方法,如有必要,任何子类都可以重写或扩展该方法。例如:

class Message {
    String orderId;
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
}

然后,您可以根据需要多次对其进行子类化:

class RestrictedMessage {
    @Override
    public void setOrderId(String orderId) {
        if (orderId.length > 0) {
            super.setOrderId(orderId);
        }
    }
}

这样,您可以覆盖但仍使用原始功能(如果需要)。

相关内容

最新更新