亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

開放與封閉 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

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

開放與封閉

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

    舉一個(gè)badCase:

    開發(fā)一個(gè)庫,里面定義了加法,用戶調(diào)用你這個(gè)庫實(shí)現(xiàn)了他的1+1的需求,這時(shí)候業(yè)務(wù)擴(kuò)大了另一個(gè)客戶需要加法的同時(shí)也希望能夠使用減法,作為一個(gè)合格的開發(fā)產(chǎn)品,你不會說為這個(gè)公司再單獨(dú)開發(fā)一個(gè)庫,首選當(dāng)然是將原有庫進(jìn)行修改,將其開發(fā)成一個(gè)功能強(qiáng)大的產(chǎn)品,那么問題來了,當(dāng)你要加入減法的時(shí)候,你的第一個(gè)只需要加法的客戶肯定不愿意因?yàn)槟愕淖兓惨薷淖约旱拇a,他的產(chǎn)品好好的因?yàn)槟阋薷漠a(chǎn)品,相信我你會失去他的。那么怎么辦呢?當(dāng)然是庫升級的時(shí)候客戶A仍然可以在不改動代碼的情況下去使用庫,客戶B呢可以同時(shí)用你的庫去實(shí)現(xiàn)減法。

    所以你的問題就來了,我們在開發(fā)只有加法功能的V1.0的時(shí)候就要考慮到將來可能存在的擴(kuò)展,和在不影響原有使用的基礎(chǔ)上進(jìn)行擴(kuò)展,那么你就要考慮哪里封閉那里開放。這個(gè)過程你可以以各種SDK為對象想一下,當(dāng)SDK或者各種語言api升級的時(shí)候是如何做到,他們是怎么保證老產(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)在你要加一個(gè)乘法,如果你在interface里面直接加上cheng();那么客戶端代碼也必須加上cheng()這個(gè)方法才能工作,

電腦資料

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

    應(yīng)該怎么做呢?

    我想到兩種:

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

    當(dāng)需求變更時(shí),讓老客戶去繼續(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>

    另一種方法是把所有的操作加減乘除都作為子類讓客戶選擇進(jìn)行使用,當(dāng)需要一個(gè)開根號時(shí),新加一個(gè)開跟號類即可。

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

最新文章