C#设计模式六大原则之--接口隔离原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#) 接口隔离原则。

接口隔离原则(Interface Segregation Principle)

接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 其中单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。遵循接口隔离原则是为了约束接口、降低类对接口的依赖性。

例如,

1)一般的反面设计实现

复制代码
using System;
namespace ConsoleApplication
{
    class Program
    {
        //定义接口动物
        public interface IAnimal
        {
            void Eat();//吃行为
            void Walk();//行走行为
            void Run();//奔跑行为
            void Fly();//飞翔行为
            void Glide();//滑翔行为
        }
        //动物狗实现类
        public class Dog : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("吃狗粮");
            }
            public void Walk()
            {
                Console.WriteLine("四条腿走路");
            }
            public void Run()
            {
                Console.WriteLine("快跑");
            }
            //对狗来说无用的接口方法
            public void Glide() { }
            public void Fly() { }
        }
        //动物鸟实现类
        public class Bird : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("吃虫子");
            }
            public void Glide()
            {
                Console.WriteLine("在空中滑翔");
            }
            public void Fly()
            {
                Console.WriteLine("起飞");
            }
            //对鸟来说无用的接口方法
            public void Walk() { }
            public void Run() { }
        }
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.Eat();
            dog.Walk();
            dog.Run();
            Bird bird = new Bird();
            bird.Eat();
            bird.Glide();
            bird.Fly();
            Console.ReadKey();
        }
    }
}

2)接口隔离原则的实现

复制代码
using System;
namespace ConsoleApplication
{
    class Program
    {
        //定义接口动物
        public interface IAnimal1
        {
            void Eat();//吃行为
        }
        public interface IAnimal2
        {
            void Walk();//行走行为
            void Run();//奔跑行为
        }
        public interface IAnimal3
        {
            void Fly();//飞翔行为
            void Glide();//滑翔行为
        }
        //动物狗实现类
        public class Dog : IAnimal1, IAnimal2
        {
            public void Eat()
            {
                Console.WriteLine("吃狗粮");
            }
            public void Walk()
            {
                Console.WriteLine("四条腿走路");
            }
            public void Run()
            {
                Console.WriteLine("快跑");
            }
        }
        //动物鸟实现类
        public class Bird : IAnimal1, IAnimal3
        {
            public void Eat()
            {
                Console.WriteLine("吃虫子");
            }
            public void Glide()
            {
                Console.WriteLine("在空中滑翔");
            }
            public void Fly()
            {
                Console.WriteLine("起飞");
            }
        }
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.Eat();
            dog.Walk();
            dog.Run();
            Bird bird = new Bird();
            bird.Eat();
            bird.Glide();
            bird.Fly();
            Console.ReadKey();
        }
    }
}
相关推荐
qyyyyy5702 小时前
芯片 Application Note PDF 怎么读?参考电路、BOM 和调试波形翻译实战
嵌入式硬件·设计模式·机器翻译·web application
程序员贺加贝5 小时前
列表导出不够用-SaaS-ERP-单据详情导出的-Provider-模板与文档型-Excel-设计
java·后端·设计模式·架构·excel
磐时信息技术21 小时前
磐时助力中科创达 ISP Tuning 项目通过 ASPICE L2 评估
接口隔离原则
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-34-命令模式(业务实战篇)
java·spring·设计模式·命令模式·异步任务·撤销重做·事务封装
用户202252215061 天前
字节发布"豆包工作",我从AI PM角度看到的不是功能,是上下文
设计模式
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-37-中介者模式(源码剖析篇)
java·设计模式·线程池·中介者模式·源码分析·executor·applicationeventmulticaster
电子科技圈1 天前
IAR与东软睿驰达成战略合作,强化软件开发效率与生态协作
设计模式·开源·软件工程·软件构建·代码规范·设计规范·代码复审
吴声子夜歌1 天前
Java面试——设计模式(四)
java·设计模式·面试
吴声子夜歌2 天前
Java面试——设计模式(一)
java·设计模式·面试
吴声子夜歌2 天前
Java面试——设计模式(二)
java·设计模式·面试