Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对开放-封闭原则的协助_Design Patterns_Open Closed Principle - Fatal编程技术网

Design patterns 对开放-封闭原则的协助

Design patterns 对开放-封闭原则的协助,design-patterns,open-closed-principle,Design Patterns,Open Closed Principle,我被分配了一个家庭作业项目来找出为什么代码片段不符合开闭原则,但我很难弄明白。我只是在这里要求有人帮我走上正确的道路,而不是帮我完成家庭作业。如果有人能帮助我,告诉我我在这段代码中寻找什么,那将不胜感激 public class MyQueue<T> extends ArrayList<T> implements Queue<T> { int front = 0; int back = 0; void put(T e) {

我被分配了一个家庭作业项目来找出为什么代码片段不符合开闭原则,但我很难弄明白。我只是在这里要求有人帮我走上正确的道路,而不是帮我完成家庭作业。如果有人能帮助我,告诉我我在这段代码中寻找什么,那将不胜感激

public class MyQueue<T> extends ArrayList<T> implements Queue<T> {
    int front = 0;
    int back = 0;
    void put(T e) {
        add(back++, e);
    }
    T get() {
        return get(front++);
    }
    // ... other methods from Queue interface
} 
公共类MyQueue扩展ArrayList实现队列{
int-front=0;
int back=0;
无效认沽权(TE){
添加(back++,e);
}
不明白{
返回get(front++);
}
//…来自队列接口的其他方法
} 
请注意,“开放-关闭”原则不是精确的科学——它需要人类猜测“人们可能想要扩展什么”。如果我创建了一个绘制彩虹的应用程序,你会期望钩子改变颜色色调吗?图像大小?或者你希望我更进一步,让钩子完全改变图像——比如对大象?更进一步,允许动画

所以我不能百分之百确定你们的导师期望什么样的扩展。但我突然想到,从ArrayList继承下来的东西不是很好,你不觉得吗?它违反了其他原则,比如封装,但是对于手头的主题——如果我想“插入”我自己的列表,比如一个由文件备份的列表,该怎么办?还是在多台机器上复制的


你可以用你的想象力来考虑其他可能的扩展。但这实际上取决于你课程的水平和重点。例如,您是否希望能够编写一个足够灵活的队列来支持优先级队列?

不确定您指的是哪种打开/关闭原则。是否底层的列表操作方法仍然可用,并且可能违反队列语义?至少在书中,openforextension指定了它,但closeformodification指定了它。如果那helps.OP是指solid中的“O”,不要想太多--在不更改它的情况下,没有办法向这个类添加功能--因此它是不可扩展的。这就是我要讨论的方向。