[問題] 關於Open Close Principle的疑問
關於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://www.ptt.cc/bbs/java/M.1419476694.A.AC0.html
※ 編輯: erttyy8821 (219.87.84.93), 12/25/2014 11:05:13
→
12/25 12:22, , 1F
12/25 12:22, 1F
→
12/25 12:26, , 2F
12/25 12:26, 2F
我不太懂的是修改後還是要判斷要new哪個shape不是嘛?
還是照你的意思是可以把要所有的處理移到各種繼承Shape後的形狀內去做
所以可以省了不少的if 同時也增加了維護性 是這樣嘛?
※ 編輯: erttyy8821 (219.87.84.93), 12/25/2014 15:36:44
→
12/25 16:07, , 3F
12/25 16:07, 3F
→
12/25 16:31, , 4F
12/25 16:31, 4F
java 近期熱門文章
PTT數位生活區 即時熱門文章