C#面向?qū)ο笤O(shè)計(jì)原則之開(kāi)閉原則
開(kāi)閉原則(OCP)
定義:對(duì)擴(kuò)展開(kāi)發(fā),對(duì)修改關(guān)閉。
好處:
- 適應(yīng)性和靈活性。
- 穩(wěn)定性和延續(xù)性。
- 可復(fù)用性與可維護(hù)性。
解釋說(shuō)明:開(kāi)閉原則指的是兩方面:對(duì)功能擴(kuò)展開(kāi)發(fā),對(duì)修改進(jìn)行關(guān)閉;有時(shí)當(dāng)用戶(hù)要求或需求發(fā)生變化時(shí),我們不得不打開(kāi)原來(lái)的代碼進(jìn)行修改,進(jìn)行功能的擴(kuò)展或增加,這種設(shè)計(jì)如果應(yīng)用到我們以后的項(xiàng)目開(kāi)發(fā)中會(huì)導(dǎo)致嚴(yán)重的問(wèn)題,這樣容易導(dǎo)致意外的錯(cuò)誤。好的程序,應(yīng)該保證在我們進(jìn)行程序擴(kuò)展時(shí),不會(huì)更改以前的代碼。如何才能保證這樣的效果呢?我們?cè)诙x一個(gè)類(lèi)的功能時(shí):最好先定義他的抽象類(lèi)或接口,這樣在功能擴(kuò)展時(shí),我們只需要在原來(lái)抽象類(lèi)和接口的基礎(chǔ)上編寫(xiě)新的實(shí)現(xiàn)類(lèi)和子類(lèi),這樣既能擴(kuò)展功能又不影響以前的功能。
示例:
定義數(shù)據(jù)庫(kù)鏈接的接口
using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 開(kāi)閉原則_OCP_ { /// <summary> /// 數(shù)據(jù)庫(kù)連接 /// </summary> public interface IDbConnection { public DbConnection GetConnection(); } }
分別定義兩個(gè)接口的實(shí)現(xiàn)類(lèi)
SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi):
using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace 開(kāi)閉原則_OCP_ { public class SqlServerDbConnection :IDbConnection { public DbConnection GetConnection() { // 連接數(shù)據(jù)庫(kù)并返回 return new SqlConnection(); } } }
Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)類(lèi)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OracleClient; using System.Data.Common; using System.Data.OracleClient; namespace 開(kāi)閉原則_OCP_ { public class OracleDbConnection:IDbConnection { public DbConnection GetConnection() { // 連接數(shù)據(jù)庫(kù)并返回 return new OracleConnection(); } } }
如果又增加了一個(gè)數(shù)據(jù)庫(kù),只需要在定義一個(gè)接口的實(shí)現(xiàn)類(lèi)就可以。接口不會(huì)發(fā)生變化,接口的實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)了多樣性,這樣就實(shí)現(xiàn)了開(kāi)閉原則。
代碼下載鏈接:點(diǎn)此下載
到此這篇關(guān)于C#面向?qū)ο笤O(shè)計(jì)原則之開(kāi)閉原則的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#實(shí)現(xiàn)六大設(shè)計(jì)原則之依賴(lài)倒置原則
- C#面向?qū)ο笤O(shè)計(jì)原則之組合/聚合復(fù)用原則
- C#面向?qū)ο笤O(shè)計(jì)原則之接口隔離原則
- C#面向?qū)ο笤O(shè)計(jì)原則之里氏替換原則
- C#面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)原則
- C#實(shí)現(xiàn)六大設(shè)計(jì)原則之迪米特法則
- C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則
- C#實(shí)現(xiàn)六大設(shè)計(jì)原則之里氏替換原則
- C#實(shí)現(xiàn)六大設(shè)計(jì)原則之單一職責(zé)原則
- 淺談C#六大設(shè)計(jì)原則
- C#編程之依賴(lài)倒置原則DIP
相關(guān)文章
c#入門(mén)之枚舉和結(jié)構(gòu)體使用詳解(控制臺(tái)接收字符串以相反的方向輸出)
這篇文章主要介紹了c#入門(mén)之枚舉和結(jié)構(gòu)體使用詳解,最后提供了編寫(xiě)控制臺(tái)應(yīng)用程序接收字符串并做相應(yīng)處理的小示例,需要的朋友可以參考下2014-04-04C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼的示例代碼
區(qū)位碼是一個(gè)4位的十進(jìn)制數(shù),每個(gè)區(qū)位碼都對(duì)應(yīng)著一個(gè)唯一的漢字,區(qū)位碼的前兩位叫做區(qū)碼,后兩位叫做位碼,下面我們就來(lái)看看如何使用C#實(shí)現(xiàn)漢字轉(zhuǎn)區(qū)位碼吧2024-01-01C#實(shí)現(xiàn)TCP連接信息統(tǒng)計(jì)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)TCP連接信息統(tǒng)計(jì)的方法,可實(shí)現(xiàn)有效獲取TCP連接信息及連接狀態(tài)的功能,需要的朋友可以參考下2015-07-07C#實(shí)現(xiàn)的XML操作類(lèi)實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的XML操作類(lèi),涉及C#操作XML文件的讀取、插入、修改、刪除等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08