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