網(wǎng)上很多用 計算器 例子 舉例說明這兩個原則, 但是發(fā)現(xiàn)好像區(qū)別就是 OCP有個抽象類, 而SRP沒有繼承抽象
1.OCP相比較SRP, OCP的例子也都是把一個個的功能獨(dú)立出來, 這不就做到了單一職責(zé)么?
2.然后說OCP可以做到對擴(kuò)展開放, SRP不也可以做到么, 需要其他運(yùn)算時, 加一個對應(yīng)的類不就行了, 只不過相比較OCP, 沒有去繼承抽象來約束類而已啊, 所以不太理解這里的區(qū)別
3.而所謂 "修改封閉" 啥意思? 沒太懂, 不知道說的是對哪個類做到了修改封閉, 畢竟即便是OCP, 新擴(kuò)展(增加)一個運(yùn)算類是很容易, 但是增加完了, 不還得在主頁中中修改(在if else 或 switch case中增加一級么)
4.很多資料說 繼承了抽象, 所以就對修改封閉 沒看懂
一個設(shè)計良好的模塊,拿給別人用,那人需要一些新功能,應(yīng)該怎么用呢,是修改已有模塊代碼?還是用別的手段進(jìn)行擴(kuò)展?開閉原則就是你的模塊要是足夠牛逼,就不會逼著別人改你的源碼╮(╯_╰)╭ 在使用足夠牛逼的模塊時,要通過擴(kuò)展來實(shí)現(xiàn)自己的功能而不是改人家代碼。
單一職責(zé)就好理解了,對于一個一個的組件來說,多功能是沒必要的,沙發(fā)是沙發(fā),床是床,沙發(fā)床只能是權(quán)宜之計。
兩者之間相同的地方就是“如無必要,勿增實(shí)體”,沒有必要改代碼就不要改代碼,沒必要加功能就不要加功能。通過組件之間的拼接組合實(shí)現(xiàn)整體功能,這樣就能實(shí)現(xiàn)“高內(nèi)聚,低耦合”的理想了。
當(dāng)然這倆原則某種角度來說也是矛盾的,模塊如何才能足夠牛逼?大而全就可以了,然而大而全顯然和單一職責(zé)沖突,所以這里就又有個權(quán)衡的問題,不過不用擔(dān)心,“權(quán)衡”這種事情是無處不在的,“選擇比努力重要”說的就是權(quán)衡的重要性。
這六個原則在廣義上不是互相沖突的,而且是要求同時實(shí)現(xiàn)的。
對于1,OCP所想實(shí)現(xiàn)的能力不影響它同時是SRP;
對于2,如你所說,SRP是通過增加對應(yīng)的類來實(shí)現(xiàn)的,也就是說增加乘法計算時不需要去修改原來的加法計算類,加法計算類對修改是封閉的,可卻可與通過繼承計算基類而增加乘法計算。這就是說這個計算類不只對修改封閉,還對拓展開放。同理,這不影響每個子類都是單一職則的,而且恰好體現(xiàn)了這些子類良好的符合了這兩個原則。
對于3,封閉在這里是那個加法子類,你不需要擔(dān)心增加乘法后你的加法算法出現(xiàn)問題,它是封閉的。
請諸位指正。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。