面向对象设计原则二:开闭原则(OCP)

Posted .NET开发菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象设计原则二:开闭原则(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 }

如果又增加了一个数据库,只需要在定义一个接口的实现类就可以。接口不会发生变化,接口的实现类实现了多样性,这样就实现了开闭原则。

以上是关于面向对象设计原则二:开闭原则(OCP)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 - 六大设计原则之OCP(开闭原则)

设计模式 - 六大设计原则之OCP(开闭原则)

设计模式开闭原则

开闭原则——面向对象设计原则

设计模-设计原则-开闭原则

代码设计原则--开闭原则