面向对象设计原则二:开闭原则(OCP)
开闭原则(OCP)
定义:对扩展开发,对修改关闭。
好处:
适应性和灵活性。
稳定性和延续性。
可复用性与可维护性。
解释说明:开闭原则指的是两方面:对功能扩展开发,对修改进行关闭;有时当用户要求或需求发生变化时,我们不得不打开原来的代码进行修改,进行功能的扩展或增加,这种设计如果应用到我们以后的项目开发中会导致严重的问题,这样容易导致意外的错误。好的程序,应该保证在我们进行程序扩展时,不会更改以前的代码。如何才能保证这样的效果呢?我们在定义一个类的功能时:最好先定义他的抽象类或接口,这样在功能扩展时,我们只需要在原来抽象类和接口的基础上编写新的实现类和子类,这样既能扩展功能又不影响以前的功能。
示例:
定义数据库链接的接口
using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 开闭原则_OCP_ { /// <summary> /// 数据库连接 /// </summary> public interface IDbConnection { public DbConnection GetConnection(); } }
分别定义两个接口的实现类
SQL Server数据库实现类:
1 using System; 2 using System.Collections.Generic; 3 using System.Data.Common; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Data.SqlClient; 8 9 namespace 开闭原则_OCP_ 10 { 11 public class SqlServerDbConnection :IDbConnection 12 { 13 public DbConnection GetConnection() 14 { 15 // 连接数据库并返回 16 return new SqlConnection(); 17 } 18 } 19 }
Oracle数据库实现类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data.OracleClient; 7 using System.Data.Common; 8 using System.Data.OracleClient; 9 10 namespace 开闭原则_OCP_ 11 { 12 public class OracleDbConnection:IDbConnection 13 { 14 public DbConnection GetConnection() 15 { 16 // 连接数据库并返回 17 return new OracleConnection(); 18 } 19 } 20 }
如果又增加了一个数据库,只需要在定义一个接口的实现类就可以。接口不会发生变化,接口的实现类实现了多样性,这样就实现了开闭原则。
代码下载链接:https://files.cnblogs.com/files/dotnet261010/OO%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.rar
分类:
面向对象设计原则
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决