iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现六大设计原则之接口隔离原则
  • 689
分享到

C#实现六大设计原则之接口隔离原则

2024-04-02 19:04:59 689人浏览 八月长安
摘要

接口隔离原则(ISP)定义: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来: 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对

接口隔离原则(ISP)定义:

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

问题由来:

类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

解决方案:

将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。

举例来说明接口隔离原则:

类A依赖接口I中的方法1、方法2、方法3,类B是对类A依赖的实现。

类C依赖接口I中的方法1、方法4、方法5,类D是对类C依赖的实现。

对于类B和类D来说,虽然他们都存在着用不到的方法(也就是图中红色字体标记的方法),但由于实现了接口I,所以也必须要实现这些用不到的方法。

code:

public interface I
    {
        void One();
        void Two();
        void Three();
        void Four();
        void Five();
    }
public class B : I
    {
        public void One()
        {
            Console.WriteLine("实现了");
        }

        public void Two()
        {
            Console.WriteLine("实现了");
        }

        public void Three()
        {
            Console.WriteLine("实现了");
        }

        public void Four()
        {
        }

        public void Five()
        {

        }
        
    }
public class D : I
    {
        public void One()
        {
            Console.WriteLine("实现了");
        }

        public void Two()
        {
        }

        public void Three()
        {
        }

        public void Four()
        {
            Console.WriteLine("实现了");
        }

        public void Five()
        {
            Console.WriteLine("实现了");
        }
    }

可以看到,如果接口过于臃肿,只要接口中出现的方法,不管对依赖于它的类有没有用处,实现类中都必须去实现这些方法,这显然不是好的设计。如果将这个设计修改为符合接口隔离原则,就必须对接口I进行拆分。在这里我们将原有的接口I拆分为三个接口,拆分后的设计如图所示:

相对应的代码Code:

public interface I1
    {
        void One();
    }

    public interface I2
    {
        void Two();
        void Three();
       
    }

    public interface I3
    {
        void Four();
        void Five();
    }
public class B : I1,I2
    {
        public void One()
        {
            Console.WriteLine("实现了");
        }

        public void Two()
        {
            Console.WriteLine("实现了");
        }

        public void Three()
        {
            Console.WriteLine("实现了");
        }
    }
public class D : I1,I3
    {
        public void One()
        {
            Console.WriteLine("实现了");
        }
        
        public void Four()
        {
            Console.WriteLine("实现了");
        }

        public void Five()
        {
            Console.WriteLine("实现了");
        }
    }

接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。

也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

上面例子中,将一个庞大的接口变更为3个专用的接口所采用的就是接口隔离原则。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。

接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

采用接口隔离原则对接口进行约束时,要注意以下几点:

  • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
  • 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
  • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

到此这篇关于C#实现六大设计原则之接口隔离原则的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现六大设计原则之接口隔离原则

本文链接: https://www.lsjlt.com/news/138358.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#实现六大设计原则之接口隔离原则
    接口隔离原则(ISP)定义: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来: 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对...
    99+
    2024-04-02
  • C#面向对象设计原则之接口隔离原则
    接口隔离原则(ISP) 定义:使用多个专门的接口比使用单一的总接口要好。即不要把鸡蛋都放到一个篮子里。好处:比较灵活、方便,不想实现的或不用实现的可以不实现。解释说明:大部分人都喜欢...
    99+
    2024-04-02
  • Java设计模式七大原则之接口隔离原则详解
    目录定义案例需求方案一方案二对比分析总结小知识点相同点不同点定义 接口隔离原则(Interface Segregation Principle),又称为ISP原则,官方定义为 1.客...
    99+
    2024-04-02
  • C#实现六大设计原则之单一职责原则
    单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责。  问题由来: 类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求...
    99+
    2024-04-02
  • C#实现六大设计原则之依赖倒置原则
    依赖倒置原则(DIP)定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须...
    99+
    2024-04-02
  • C#实现六大设计原则之里氏替换原则
    定义: 1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,...
    99+
    2024-04-02
  • 六大设计原则之开闭原则
    定义: 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 问题由来: 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也...
    99+
    2024-04-02
  • C#接口隔离原则怎么实现
    今天小编给大家分享一下C#接口隔离原则怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。接口隔离原则(ISP)定义:使用...
    99+
    2023-06-29
  • C#实现六大设计原则之迪米特法则
    定义: 一个对象应该对其他对象保持最少的了解。 问题由来: 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 解决方案: 尽量降低类与类之间的耦合。 ...
    99+
    2024-04-02
  • Java设计模式之接口隔离原则精解
    1.什么是接口隔离原则? 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口范围上。 2.对应代码 上面这张图呢,就违反了接口隔离原则。它对应的代码如下:...
    99+
    2024-04-02
  • java面向对象设计原则之接口隔离原则示例详解
    目录概念实现拓展概念 小接口原则,即每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。如下图所示定义了一个接口,包含了5个方法,实现类A用到了3个方法、实现类B用...
    99+
    2024-04-02
  • Java接口隔离原则实例分析
    这篇“Java接口隔离原则实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java接口隔离原则实例分析”文章吧。定义接...
    99+
    2023-06-29
  • C#中怎么实现并使用接口隔离原则
    在C#中实现接口隔离原则,可以通过定义多个小而精简的接口,而不是一个大而臃肿的接口。这样可以让每个接口只包含一个特定功能或行为,使得...
    99+
    2024-04-03
    C#
  • 解析Java实现设计模式六大原则之里氏替换原则
    目录一、什么是里氏替换原则1.1、里氏替换原则定义1.2、里氏替换原则有至少有两种含义二、使用里氏替换原则的目的三、里氏替换原则与继承多态之间的关系四、里式替换的规则4.1、子类方法...
    99+
    2024-04-02
  • 详解java设计模式之六大原则
    目录一、单一职责原则1、单一职责定义2、单一职责优点3、案例说明4、自己理解二、里氏代换原则1、定义2、案例说明3、自己理解三、接口隔离原则1、定义2、案例说明3、自己理解四、依赖倒...
    99+
    2024-04-02
  • Java中接口隔离原则是什么
    小编给大家分享一下Java中接口隔离原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是接口隔离原则?客户端不应该依赖它不需要的接口,即一个类对另一...
    99+
    2023-06-29
  • python3--归一化设计,接口类和抽象类,接口隔离原则,多态
    抽象类与接口类继承有两种用途1 继承基类的方法,并且做出自己的改变或者扩展(代码重用)2 声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中...
    99+
    2023-01-30
    接口 原则 多态
  • C#面向对象设计原则之开闭原则
    开闭原则(OCP) 定义:对扩展开发,对修改关闭。好处: 适应性和灵活性。稳定性和延续性。可复用性与可维护性。 解释说明:开闭原则指的是两方面:对功能扩展开发,对修改进行关闭;有时当...
    99+
    2024-04-02
  • Java设计模式六大原则是什么
    这篇文章主要讲解了“Java设计模式六大原则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式六大原则是什么”吧!单一职责原则单一职责定义一个类只负责一个功能领域中的相应职...
    99+
    2023-06-02
  • java设计模式之六大原则分别是什么
    这篇文章将为大家详细讲解有关java设计模式之六大原则分别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作