網(wǎng)站首頁(yè) 編程語言 正文
開閉原則(OCP)
定義:對(duì)擴(kuò)展開發(fā),對(duì)修改關(guān)閉。
好處:
- 適應(yīng)性和靈活性。
- 穩(wěn)定性和延續(xù)性。
- 可復(fù)用性與可維護(hù)性。
解釋說明:開閉原則指的是兩方面:對(duì)功能擴(kuò)展開發(fā),對(duì)修改進(jìn)行關(guān)閉;有時(shí)當(dāng)用戶要求或需求發(fā)生變化時(shí),我們不得不打開原來的代碼進(jìn)行修改,進(jìn)行功能的擴(kuò)展或增加,這種設(shè)計(jì)如果應(yīng)用到我們以后的項(xiàng)目開發(fā)中會(huì)導(dǎo)致嚴(yán)重的問題,這樣容易導(dǎo)致意外的錯(cuò)誤。好的程序,應(yīng)該保證在我們進(jìn)行程序擴(kuò)展時(shí),不會(huì)更改以前的代碼。如何才能保證這樣的效果呢?我們?cè)诙x一個(gè)類的功能時(shí):最好先定義他的抽象類或接口,這樣在功能擴(kuò)展時(shí),我們只需要在原來抽象類和接口的基礎(chǔ)上編寫新的實(shí)現(xiàn)類和子類,這樣既能擴(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 開閉原則_OCP_ { ////// 數(shù)據(jù)庫(kù)連接 /// public interface IDbConnection { public DbConnection GetConnection(); } }
分別定義兩個(gè)接口的實(shí)現(xiàn)類
SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)類:
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 開閉原則_OCP_ { public class SqlServerDbConnection :IDbConnection { public DbConnection GetConnection() { // 連接數(shù)據(jù)庫(kù)并返回 return new SqlConnection(); } } }
Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)類
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 開閉原則_OCP_ { public class OracleDbConnection:IDbConnection { public DbConnection GetConnection() { // 連接數(shù)據(jù)庫(kù)并返回 return new OracleConnection(); } } }
如果又增加了一個(gè)數(shù)據(jù)庫(kù),只需要在定義一個(gè)接口的實(shí)現(xiàn)類就可以。接口不會(huì)發(fā)生變化,接口的實(shí)現(xiàn)類實(shí)現(xiàn)了多樣性,這樣就實(shí)現(xiàn)了開閉原則。
代碼下載鏈接:點(diǎn)此下載
原文鏈接:https://www.cnblogs.com/dotnet261010/p/7349890.html
相關(guān)推薦
- 2022-12-04 詳解Golang中g(shù)cache模塊的基本使用_Golang
- 2022-09-13 go語言中切片Slice與數(shù)組Array對(duì)比以及panic:?runtime?error:?inde
- 2022-04-28 WPF使用Grid網(wǎng)格面板布局_實(shí)用技巧
- 2022-08-27 深入理解Redis內(nèi)存淘汰策略_Redis
- 2022-10-30 Python標(biāo)準(zhǔn)庫(kù)中的logging用法示例詳解_python
- 2022-06-07 Jenkins?腳本命令行應(yīng)用小結(jié)_相關(guān)技巧
- 2022-07-22 C語言輸出所有水仙花數(shù)
- 2022-06-08 Spring源碼之Bean的掃描以及創(chuàng)建
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支