亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

開放與封閉 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.msguai.com - 電腦資料】

    軟件工程中的開放與封閉原則是一個開發(fā)前的指南,當你進行工程開發(fā)時要依據(jù)這個原則,

開放與封閉

。

    開放封閉就是對擴展開放對修改封閉,目的是指導開發(fā)一個當需求增加時,不需要修改原有代碼而進行代碼擴展即可實現(xiàn)。為什么不去修改原代碼呢?

    舉一個badCase:

    開發(fā)一個庫,里面定義了加法,用戶調(diào)用你這個庫實現(xiàn)了他的1+1的需求,這時候業(yè)務擴大了另一個客戶需要加法的同時也希望能夠使用減法,作為一個合格的開發(fā)產(chǎn)品,你不會說為這個公司再單獨開發(fā)一個庫,首選當然是將原有庫進行修改,將其開發(fā)成一個功能強大的產(chǎn)品,那么問題來了,當你要加入減法的時候,你的第一個只需要加法的客戶肯定不愿意因為你的變化,他也要修改自己的代碼,他的產(chǎn)品好好的因為你要修改產(chǎn)品,相信我你會失去他的。那么怎么辦呢?當然是庫升級的時候客戶A仍然可以在不改動代碼的情況下去使用庫,客戶B呢可以同時用你的庫去實現(xiàn)減法。

    所以你的問題就來了,我們在開發(fā)只有加法功能的V1.0的時候就要考慮到將來可能存在的擴展,和在不影響原有使用的基礎上進行擴展,那么你就要考慮哪里封閉那里開放。這個過程你可以以各種SDK為對象想一下,當SDK或者各種語言api升級的時候是如何做到,他們是怎么保證老產(chǎn)品繼續(xù)工作而新產(chǎn)品可以使用新功能的。

    看到這大概明白原理了,下面show me your code.

<code class="hljs" php="">interface operate{        jia();        jian();}</code>

    客戶端:

<code class="hljs" php="">class kehusOperate implements operate{     @Override     jia();     @Override     jian();}</code>

    現(xiàn)在你要加一個乘法,如果你在interface里面直接加上cheng();那么客戶端代碼也必須加上cheng()這個方法才能工作,

電腦資料

開放與封閉》(http://www.msguai.com)。你強行客戶去升級她的產(chǎn)品,他不會高興的。

    應該怎么做呢?

    我想到兩種:

<code class="hljs" php="">class operate{    jia();    jian();}class newOperate extends operate{    cheng();}</code>

    當需求變更時,讓老客戶去繼續(xù)使用operate,而新客戶使用新的類:

    old客戶端

<code class="hljs" scala="">class oldKeHu extends operate{        @Override        jia();        @Override        jian();}</code>

    新客戶

<code class="hljs" scala="">class newKeHu extends newOperate{    @Override    jia();    @Override    jian();    @Override    cheng();}</code>

    另一種方法是把所有的操作加減乘除都作為子類讓客戶選擇進行使用,當需要一個開根號時,新加一個開跟號類即可。

    以上就是我所理解的開放封閉原則。

最新文章