当前位置: 首页 > news >正文

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();}}
}

 

http://www.lryc.cn/news/142250.html

相关文章:

  • 【面试题】:axios二次封装都进行了哪些配置以及如果项目里面有两个baseURL你怎么解决?
  • 谈谈对 GMP 的简单认识
  • Java正则表达式系列--从字符串中提取字符串或数字
  • 机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库
  • Go 语言进阶与依赖管理 | 青训营
  • hyperf 十三 视图
  • 请你说说前端图形图像的框架
  • C++数据结构学习——栈
  • 【C++笔记】C++之类与对象(下)
  • 管理类联考——英语——实战篇——大作文——图表——动态图表——整体效果
  • threejs纹理加载三(视频加载)
  • VUE笔记(三)vue的语法
  • 探讨uniapp的路由与页面生命周期问题
  • 咸鱼之王俱乐部网站开发
  • Electron+Vue3+TS 打包exe客户端
  • vue3范围选择组件封装
  • 能被整除的数(容斥原理)
  • Modbus转Profinet网关与流量变送器兼容转ModbusTCP协议博图配置
  • HLS实现CORDIC算法计算正余弦并上板验证
  • 高阶数据结构并查集
  • WSL2连接不了外网怎么办?
  • 【C/C++】探索内存对齐的奥秘与优势
  • leetcode分类刷题:滑动窗口(二、重复元素类型)
  • MySQL—buffer pool
  • 《C和指针》笔记8: 枚举类型
  • Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解
  • docker swarm 部署服务网络问题
  • 1.00001git源码clone后进行编译(带调试)
  • 使用StorageClass动态创建pv
  • 数据结构(Java实现)-ArrayList与顺序表