作者erttyy8821 (侠)
看板java
标题[问题] 关於Open Close Principle的疑问
时间Thu Dec 25 11:04:51 2014
关於Open Close Principle 这个原则
我只大概明白是藉由一个abstract来当中间的桥梁
再需求变更的时候可以不破坏原来的架构并加入新的功能
但是一直不是很明白怎麽实作
今天找到了一个网站的example
http://www.oodesign.com/open-close-principle.html
我想问 Good example中
虽然我们不必因为新增一个新Shape就要在main中多开一个function
但我如果想draw不同的形状
也是需要先判断需求 然後再new所需的object assign进去
但这样对於OCP所期望的保有弹性不是有限嘛?
还是我对於OCP的实作理解有错误?
以下是我针对good sample改写完之後的想法
还望版上的先进针对我的盲点可以提点一下
感谢
// Open-Close Principle - Good example
public class main
{
public main()
{
if(need draw circle)
drawShape(new Circle()); <-----问题点在这边
else
drawShape(new Rectangle());
//我的认知以为是只要关心要做的事情
//而不必预先想好要做什麽
}
public void drawShape(Shape s)
{
s.draw();
}
}
abstract class Shape
{
abstract void draw();
}
class Rectangle extends Shape
{
public void draw()
{
//draw the rectangle
}
}
class Circle extends Shape
{
public void draw()
{
//draw the circle
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.87.84.93
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1419476694.A.AC0.html
※ 编辑: erttyy8821 (219.87.84.93), 12/25/2014 11:05:13
1F:→ swpoker: 就是要把可怕的if去掉拉 12/25 12:22
2F:→ swpoker: 范例只有if else还感受不到可怕,实际是if(){if(){if(){.. 12/25 12:26
我不太懂的是修改後还是要判断要new哪个shape不是嘛?
还是照你的意思是可以把要所有的处理移到各种继承Shape後的形状内去做
所以可以省了不少的if 同时也增加了维护性 是这样嘛?
※ 编辑: erttyy8821 (219.87.84.93), 12/25/2014 15:36:44
3F:→ swpoker: 如何实作回归到各shape本身,程式只需呼叫适当的类别及可 12/25 16:07
4F:→ erttyy8821: OK 感谢 :) 12/25 16:31