接口隔离原则(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(); } } }