开闭原则示例

时间:2016-05-16 18:23:10

标签: java open-closed-principle

我想通过重写这段代码来应用以下示例中的开放式原则。

class MyQueue<E> extends ArrayList<E> implements Queue<E> {
   int front=0, back=0;
   MyQueue() { }
   …
   void put(E e) { add(back++, e); ...}
   E get () { E elem = get(front++); …}
}

解决方案最接近的设计模式是什么?为什么?解释为什么它比下一个最佳匹配更好。

我无法想到这个课程会扩展哪些功能。它已经有了吸气剂和二传手。在不知道可以应用什么类型的扩展的情况下,我不确定如何重写此代码。

我所知道的: OCP对扩展程序已经开放 - 已关闭以进行修改。因此,一般方法是弄清楚如何抽象它。所以我最初的想法是用抽象方法使它成为一个抽象类。然后,每个扩展MyQueue()的类都能够实现它想要的getter和setter方法。而且,如果我这样做,那么我认为这与适配器模式非常匹配。

请纠正我的理解中的任何误解。

1 个答案:

答案 0 :(得分:1)

从我的角度来看,这是基于Queue实施制作ArrayList的示例。首先,我将尝试仅公开Queue接口方法。所有将从ArrayList继承的方法都应该以某种方式隐藏。

事实是,我们知道在Java中你不能在继承期间隐藏公共方法。 然后,只有你可以采取的方法是覆盖它们并抛出UnsupportedOperationException或者像这样。

您需要确保根据Queue内部正确实施ArrayList接口。 您应该正确实施addofferremovepoolelementpeek。源自ArrayList的其他方法应该抛出一些异常。

这是我对这个问题的看法。