开发手册 欢迎您!
软件开发者资料库

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