我想通过重写这段代码来应用以下示例中的开放式原则。
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方法。而且,如果我这样做,那么我认为这与适配器模式非常匹配。
请纠正我的理解中的任何误解。
答案 0 :(得分:1)
从我的角度来看,这是基于Queue
实施制作ArrayList
的示例。首先,我将尝试仅公开Queue
接口方法。所有将从ArrayList
继承的方法都应该以某种方式隐藏。
事实是,我们知道在Java中你不能在继承期间隐藏公共方法。
然后,只有你可以采取的方法是覆盖它们并抛出UnsupportedOperationException
或者像这样。
您需要确保根据Queue
内部正确实施ArrayList
接口。
您应该正确实施add
,offer
,remove
,pool
,element
,peek
。源自ArrayList
的其他方法应该抛出一些异常。
这是我对这个问题的看法。