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();
        }
    }
}
相关推荐
sg_knight2 小时前
设计模式实战:模板方法模式(Template Method)
python·设计模式·模板方法模式
爱学习的程序媛3 小时前
【Web前端】JavaScript设计模式全解析
前端·javascript·设计模式·web
Yu_Lijing11 小时前
基于C++的《Head First设计模式》笔记——备忘录模式
c++·笔记·设计模式·备忘录模式
无籽西瓜a12 小时前
【西瓜带你学设计模式 | 第二期-观察者模式】观察者模式——推模型与拉模型实现、优缺点与适用场景
java·后端·观察者模式·设计模式
我真会写代码15 小时前
Java程序员常用设计模式详解(实战版)
java·开发语言·设计模式
无籽西瓜a17 小时前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
cliffordl1 天前
设计模式(python)
python·设计模式
云道轩1 天前
告诉 Claude Code 在项目中遵循特定的编程模式/设计模式和技术栈约束
设计模式·ai·agent·claude code
花间相见1 天前
【Java基础面试题】—— 核心知识点面试题(含答案):语法+集合+JVM+设计模式+算法
java·jvm·设计模式
朱一头zcy1 天前
设计模式入门:最简单的模板方法模式
笔记·设计模式·模板方法模式