fancydeepin
毋意,毋必,毋固,毋我。
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆-126 評論-247 文章-5 trackbacks-0
開閉原則(OCP)
所謂的
開閉原則
(Open-Closed Principle,簡稱 OCP)
說的是:
軟件實體(類、模塊、功能等)應(yīng)該可以被擴展,但不可被修改。
開閉原則說白了就是,應(yīng)該在不修改現(xiàn)有代碼的基礎(chǔ)上,引入新功能。
開閉原則中的“開”,是指對于組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中的“閉”,是指對于原有代碼的修改是封閉的,即不應(yīng)該修改原有的代碼。
而實際上,要做到百分之百的封閉是不可能的,但是在系統(tǒng)設(shè)計的時候,還是應(yīng)該盡量做到這一點。
一個簡單的例子,假設(shè)現(xiàn)在需要實現(xiàn)一個加法的功能,很簡單,如圖示1:
現(xiàn)在的問題是,需求變了,要求還要實現(xiàn)一個減法的功能,這也很簡單,如圖示2:
如果需求再變,還要求能實現(xiàn)乘法和除法的功能,依然簡單,如圖示3:
從第2和第3步來看,很明顯,在需求改變,需要引進新的功能的時候,做法是在已有的類的基礎(chǔ)上通過新添方法來實現(xiàn)功能,假設(shè)在第2步之后,第3步的時候發(fā)現(xiàn)加法和減法功能
最終都沒有用到,反而乘法和除法需要用到,那么在第3步的時候就要推翻第2步之前的實現(xiàn),在需求發(fā)生改變需要引進新的功能的時候,就要推翻整個之前的系統(tǒng),很明顯這樣的做法
是不可取的,說明設(shè)計上出現(xiàn)了問題,這個缺陷明顯的是違反了OCP(開閉原則)。
需求總是在變的,如果可能,就要做到盡量不要去修改已有的實現(xiàn),而應(yīng)該通過擴展的手段來穩(wěn)定需求的變動。
OCP原則替換圖2:
OCP原則
替換圖3:
在我們最初編寫代碼的時候,我們假設(shè)變化不會發(fā)生,但最后變化發(fā)生的時候,可以通過創(chuàng)建抽象來隔離以后將要發(fā)生的同類變化。
開閉原則是面向?qū)ο笤O(shè)計中“可復用設(shè)計”的基礎(chǔ),是面向?qū)ο笤O(shè)計中最重要的原則之一。 從開閉原則中可以看出,面對對象的重要原則是創(chuàng)建抽象化,并且從抽象化中導出
具體化,具體化可以有許多不同的版本,而每個不同的版本可以給出不同的實現(xiàn)。
posted on 2012-08-02 11:03
fancydeepin
閱讀(871)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
github
個人主頁
beanutil
jutil
jexcel
orc
隨筆分類
(8)
junit
maven(8)
隨筆檔案
(104)
2015年6月 (8)
2015年2月 (1)
2015年1月 (1)
2014年9月 (1)
2014年8月 (3)
2014年6月 (10)
2014年5月 (3)
2014年3月 (5)
2013年10月 (1)
2013年9月 (2)
2013年4月 (1)
2013年3月 (2)
2013年2月 (11)
2012年11月 (3)
2012年10月 (14)
2012年8月 (15)
2012年7月 (13)
2012年6月 (10)
最新隨筆
1.?maven 為測試環(huán)境、生產(chǎn)環(huán)境等不同環(huán)境打包
2.?maven 多模塊項目
3.?nexus 搭建 maven 私服
4.?maven 鏡像
5.?maven jetty 插件使用
6.?maven jdk 版本配置
7.?eclipse maven plugin 插件 安裝 和 配置
8.?maven 安裝
9.?ORCP : 從數(shù)據(jù)庫表到 java 對象生成的 eclipse 插件
10.?jexcel 讀寫EXCEL
11.?linux 系列
12.?spring mvc(2):請求地址映射(@RequestMapping)
13.?spring mvc(1):基礎(chǔ)入門
14.?Java 驗證碼、二維碼
15.?GXT —— TreePanel 組件(一)
搜索
積分與排名
積分 - 1461358
排名 - 15
最新評論
1.?re: Maven 手動添加 JAR 包到本地倉庫[未登錄]
剛安裝好的maven,倉庫里沒有jar包,如何添加jar包呢?
--Firefly
2.?re: java 建造者模式(Builder)
多謝,講的很清楚
--Nimo
3.?re: Maven 手動添加 JAR 包到本地倉庫
很好很強大, 完美的解決了我的問題。。。
--klose
4.?re: eclipse maven plugin 插件 安裝 和 配置
@fancydeepin
鏈接還是失效了啊
--菜鳥一號
5.?re: Maven 手動添加 JAR 包到本地倉庫[未登錄]
@呼吸~
你好,請問,怎么設(shè)置代理呢?
--paul
閱讀排行榜
1.?eclipse maven plugin 插件 安裝 和 配置(325792)
2.?Maven 手動添加 JAR 包到本地倉庫(199723)
3.?Lombok 安裝、入門 - 消除冗長的 java 代碼(154841)
4.?java 異常捕捉 ( try catch finally ) 你真的掌握了嗎?(70174)
5.?maven jetty 插件使用(49084)
6.?JSP/Servlet 工作原理(43123)
7.?maven jdk 版本配置(40994)
8.?spring mvc(2):請求地址映射(@RequestMapping)(39571)
9.?二叉樹的深度優(yōu)先遍歷與廣度優(yōu)先遍歷 [ C++ 實現(xiàn) ](31255)
10.?maven 多模塊項目(27896)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 fancydeepin
主站蜘蛛池模板:
日韩版码免费福利视频
|
久久美女网站免费
|
免费在线看v网址
|
亚洲日韩区在线电影
|
免费视频精品一区二区三区
|
福利免费观看午夜体检区
|
中文字幕一精品亚洲无线一区
|
免费看一级高潮毛片
|
国产极品美女高潮抽搐免费网站
|
2020亚洲男人天堂精品
|
操美女视频免费网站
|
亚洲成a∧人片在线观看无码
|
免费的一级黄色片
|
免费一级毛片在线播放视频免费观看永久
|
日本特黄特色AAA大片免费
|
日韩免费视频网站
|
免费一级全黄少妇性色生活片
|
亚洲成av人片一区二区三区
|
成在线人直播免费视频
|
亚洲Av无码专区国产乱码DVD
|
无码av免费网站
|
99热亚洲色精品国产88
|
午夜无遮挡羞羞漫画免费
|
精品无码专区亚洲
|
中文字幕精品亚洲无线码一区应用
|
三级毛片在线免费观看
|
久久精品a亚洲国产v高清不卡
|
国产99视频精品免费观看7
|
精品国产亚洲一区二区三区在线观看
|
亚洲第一福利网站在线观看
|
99精品视频在线观看免费
|
亚洲成年人电影在线观看
|
日韩免费三级电影
|
怡红院免费全部视频在线视频
|
亚洲大尺码专区影院
|
国产成人啪精品视频免费网
|
中文在线免费观看
|
亚洲欧美日韩中文无线码
|
久青草国产免费观看
|
老司机亚洲精品影院
|
国产成人免费ā片在线观看
|