一、概述
即對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。這是另一種非常棒的設(shè)計(jì)原則,可以防止其他人更改已經(jīng)測(cè)試好的代碼。理論上,可以在不修改原有的模塊的基礎(chǔ)上,擴(kuò)展功能。這也是開閉原則的宗旨。
二、如何使用開閉原則:
2.1、抽象約束
第一,通過接口或者抽象類約束擴(kuò)展,對(duì)擴(kuò)展進(jìn)行邊界限定,不允許出現(xiàn)在接口或抽象類中不存在的public方法;
第二,參數(shù)類型、引用對(duì)象盡量使用接口或者抽象類,而不是實(shí)現(xiàn)類;
第三,抽象層盡量保持穩(wěn)定,一旦確定即不允許修改。
2.2、元數(shù)據(jù)(metadata)控制模塊行為
元數(shù)據(jù)就是用來描述環(huán)境和數(shù)據(jù)的數(shù)據(jù),通俗地說就是配置參數(shù),參數(shù)可以從文件中獲得,也可以從數(shù)據(jù)庫中獲得。
Spring容器就是一個(gè)典型的元數(shù)據(jù)控制模塊行為的例子,其中達(dá)到極致的就是控制反轉(zhuǎn)(Inversion of Control)
2.3、制定項(xiàng)目章程
在一個(gè)團(tuán)隊(duì)中,建立項(xiàng)目章程是非常重要的,因?yàn)檎鲁讨兄付怂腥藛T都必須遵守的約定,對(duì)項(xiàng)目來說,約定優(yōu)于配置。
2.4、封裝變化
對(duì)變化的封裝包含兩層含義:
第一,將相同的變化封裝到一個(gè)接口或者抽象類中;
第二,將不同的變化封裝到不同的接口或抽象類中,不應(yīng)該有兩個(gè)不同的變化出現(xiàn)在同一個(gè)接口或抽象類中。