最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

單一職責(zé)原則與開放閉合原則 單一職責(zé)原則是指一個(gè)類或模塊只負(fù)責(zé)完成一個(gè)功能或p

2023-03-13 09:36 作者:酸奶公園  | 我要投稿

單一職責(zé)原則與開放閉合原則



單一職責(zé)原則是指一個(gè)類或模塊只負(fù)責(zé)完成一個(gè)功能或職責(zé)。

具體來說,就是一個(gè)類或模塊應(yīng)該只有一個(gè)引起它變化的原因,也就是只有一個(gè)職責(zé)或功能,如果一個(gè)類或模塊擁有多個(gè)職責(zé)或功能,就容易產(chǎn)生耦合和復(fù)雜度,從而難以維護(hù)和擴(kuò)展。

例如,一個(gè)圖書館管理系統(tǒng)中,圖書館管理員負(fù)責(zé)借還書,圖書管理員就應(yīng)該只處理借還書的職責(zé),而不應(yīng)該涉及到其他功能,比如維護(hù)圖書館的收入和支出情況等。 單一職責(zé)原則是面向?qū)ο笤O(shè)計(jì)中的一項(xiàng)基本原則,它可以提高系統(tǒng)的可維護(hù)性、可測(cè)試性和可擴(kuò)展性,避免代碼臃腫和復(fù)雜度高的問題,使代碼更加清晰易懂。

開放閉合原則(Open Closed Principle,OCP)是指一個(gè)軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。

具體來說,一個(gè)模塊的行為應(yīng)該能夠在不修改源代碼的情況下被擴(kuò)展,而且應(yīng)該允許新的行為通過增加新的代碼來實(shí)現(xiàn)。換句話說,當(dāng)需要添加一些新的功能時(shí),不應(yīng)該修改現(xiàn)有的代碼,而是應(yīng)該通過添加新的代碼來擴(kuò)展原有的功能。這樣做的好處是,可以保證現(xiàn)有的代碼不被破壞或修改,使得系統(tǒng)更加穩(wěn)定、可靠和易于維護(hù)。

例如,一個(gè)博客系統(tǒng)中,需要支持不同的文章類型,比如文本、圖片、視頻等。如果采用開放閉合原則,就應(yīng)該定義一個(gè)文章類型的抽象基類或接口,然后針對(duì)每種類型實(shí)現(xiàn)一個(gè)具體的子類或?qū)崿F(xiàn)類。這樣,當(dāng)需要添加新的文章類型時(shí),只需要實(shí)現(xiàn)一個(gè)新的子類或?qū)崿F(xiàn)類即可,而不需要修改現(xiàn)有的文章類型代碼。

開放閉合原則是面向?qū)ο笤O(shè)計(jì)中的一個(gè)重要原則,它可以提高系統(tǒng)的靈活性、可擴(kuò)展性和可維護(hù)性,使得系統(tǒng)更加易于修改和維護(hù),也更容易適應(yīng)變化。然而實(shí)現(xiàn)開放閉合原則并不容易,需要對(duì)系統(tǒng)進(jìn)行適當(dāng)?shù)募軜?gòu)設(shè)計(jì)和模塊劃分,同時(shí)還需要理解和應(yīng)用其他面向?qū)ο笤O(shè)計(jì)原則和模式。


針對(duì)需要添加繪制三角形功能的問題,可以通過遵循單一職責(zé)原則和開放閉合原則來實(shí)現(xiàn)。

首先,圖形編輯器GraphicEditor類需要遵循單一職責(zé)原則,即一個(gè)類只負(fù)責(zé)完成一個(gè)功能或職責(zé)。因此,可以將矩形、圓形和三角形的繪制功能分別封裝成單獨(dú)的類,比如Rectangle、Circle和Triangle類,并讓它們分別負(fù)責(zé)繪制對(duì)應(yīng)的圖形。

其次,為了遵循開放閉合原則,可以定義一個(gè)抽象的Shape類或接口,讓Rectangle、Circle和Triangle類都實(shí)現(xiàn)這個(gè)接口。這樣,當(dāng)需要添加新的圖形時(shí),只需要實(shí)現(xiàn)一個(gè)新的類并實(shí)現(xiàn)Shape接口,而不需要修改現(xiàn)有的代碼。

最終,GraphicEditor類只需要負(fù)責(zé)調(diào)用每個(gè)圖形類的繪制方法即可,如下所示:

其中,GraphicEditor類負(fù)責(zé)調(diào)用各個(gè)圖形類的繪制方法,而Rectangle、Circle和Triangle類分別負(fù)責(zé)繪制對(duì)應(yīng)的圖形。

同時(shí),這三個(gè)具體圖形類都實(shí)現(xiàn)了抽象的Shape接口,以便于系統(tǒng)的擴(kuò)展和維護(hù)。

通過遵循單一職責(zé)原則和開放閉合原則,我們能夠使系統(tǒng)更加靈活、可擴(kuò)展和易于維護(hù),從而提高系統(tǒng)的質(zhì)量和可靠性。

同時(shí),我們還可以借鑒其他面向?qū)ο笤O(shè)計(jì)原則和模式,比如依賴倒置原則、組合模式、工廠模式等,以進(jìn)一步提高系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)水平。

public class GraphicEditor {

public void drawRectangle(Rectangle r) {

r.draw();

}

public void drawCircle(Circle c) {

c.draw();

}

public void drawTriangle(Triangle t) {

t.draw();

}

}

這樣就能實(shí)現(xiàn)添加新的三角形繪制功能而不需要修改現(xiàn)有代碼,同時(shí)也遵循了單一職責(zé)原則和開放閉合原則。




針對(duì)用戶需求中需要添加折線圖LineChart的功能,應(yīng)用開閉原則的方法如下:


首先,定義一個(gè)抽象的圖表接口Chart,其中包含一個(gè)抽象的繪制方法draw(),表示所有圖表都需要實(shí)現(xiàn)繪制功能。


然后,定義一個(gè)具體的折線圖類LineChart,它實(shí)現(xiàn)了Chart接口,并且實(shí)現(xiàn)了繪制方法draw(),用于繪制折線圖。


接下來,對(duì)于原有的CRM系統(tǒng),可以通過擴(kuò)展現(xiàn)有的圖表管理類ChartManager來添加支持折線圖的功能。具體來說,可以在ChartManager類中添加一個(gè)addLineChart()方法,用于添加折線圖對(duì)象,并將其存儲(chǔ)在圖表列表中,代碼如下:


public class ChartManager {


private ListchartList;


public ChartManager() {


chartList = new ArrayList();


}


public void addChart(Chart chart) {


chartList.add(chart);


}


public void addLineChart(LineChart lineChart) {


chartList.add(lineChart);


}


public void drawCharts() {


for (Chart chart : chartList) {


chart.draw();


}


}


}


在客戶端代碼中,同樣也可以通過調(diào)用ChartManager類的addLineChart()方法來添加折線圖對(duì)象,代碼如下:


ChartManager chartManager = new ChartManager();


// 添加柱狀圖對(duì)象


chartManager.addChart(new BarChart());


// 添加餅狀圖對(duì)象


chartManager.addChart(new PieChart());


// 添加折線圖對(duì)象


chartManager.addLineChart(new LineChart());


// 繪制所有圖表


chartManager.drawCharts();


通過上述設(shè)計(jì)方案,我們遵循了開放閉合原則,不需要修改現(xiàn)有的代碼就可以擴(kuò)展系統(tǒng)功能,同時(shí)也遵循了單一職責(zé)原則,每個(gè)類只負(fù)責(zé)自己的功能,提高了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。



單一職責(zé)原則與開放閉合原則 單一職責(zé)原則是指一個(gè)類或模塊只負(fù)責(zé)完成一個(gè)功能或p的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
南京市| 香港 | 古丈县| 咸宁市| 绥中县| 西平县| 德清县| 涿州市| 项城市| 盐亭县| 旅游| 叙永县| 东安县| 姚安县| 九寨沟县| 南通市| 德惠市| 南安市| 三明市| 平乡县| 石泉县| 霍州市| 勐海县| 莱阳市| 大兴区| 白河县| 阳朔县| 苍山县| 理塘县| 西青区| 伽师县| 綦江县| 曲阜市| 得荣县| 深水埗区| 宁陕县| 凤山县| 新建县| 长宁县| 邵武市| 任丘市|