zoukankan      html  css  js  c++  java
  • 面向对象设计原则二:开闭原则(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 }

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

    代码下载链接:http://files.cnblogs.com/files/dotnet261010/OO%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.rar

  • 相关阅读:
    【网络游戏同步技术】帧同步的一致性
    【C++】STL常用容器总结之五:双端队列deque
    使 egg-multipart 同时支持 stream 和 file
    react + 图灵api 实现模拟客服
    egg 扩展上传文件白名单
    input[type=file] 样式美化,input上传按钮美化
    react-lazyload 实现图片懒加载
    useEffect 模拟 react 生命周期
    egg 实现下载数据,并保存成excel文件
    egg 实现上传excel,并解析保存到数据库
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/7349890.html
Copyright © 2011-2022 走看看