• 设计模式七大原则之接口隔离原则


    接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

    接口隔离不应该继承臃肿的接口,只依赖需要的接口,接口必须实现单一职责原则,

    举个简单的例子:

     1     public class B : A
     2     {
     3         public void Method1()
     4         {
     5             Console.WriteLine("需要用到方法1");
     6         }
     7 
     8         public void Method2()
     9         {
    10             throw new NotImplementedException();
    11         }
    12 
    13         public void Method3()
    14         {
    15             Console.WriteLine("需要用到方法3");
    16         }
    17 
    18         public void Method4()
    19         {
    20             Console.WriteLine("需要用到方法4");
    21         }
    22 
    23         public void Method5()
    24         {
    25             throw new NotImplementedException();
    26         }
    27     }
    28 
    29     public class C : A
    30     {
    31         public void Method1()
    32         {
    33             Console.WriteLine("需要用到方法1");
    34         }
    35 
    36         public void Method2()
    37         {
    38             Console.WriteLine("需要用到方法2");
    39         }
    40 
    41         public void Method3()
    42         {
    43             throw new NotImplementedException();
    44         }
    45 
    46         public void Method4()
    47         {
    48             throw new NotImplementedException();
    49         }
    50 
    51         public void Method5()
    52         {
    53             Console.WriteLine("需要用到方法5");
    54         }
    55     }
    56 
    57 
    58 
    59     public interface A
    60     {
    61         void Method1();
    62         void Method2();
    63         void Method3();
    64 
    65         void Method4();
    66         void Method5();
    67 
    68     }

            从上面的例子我们可以看到,B需要用到A接口的Method1,Method3,Method4方法,C需要用到A接口的Method1,Method2,Method5方法,B和C类继承的A接口都有不需要用到的接口方法,造成臃肿。

            根据接口隔离原则,当一个接口太大时,需要将它分割成一些更细小的接口,使用该接口的客户端仅需制定与之相关的方法就可以了。每一个接口应该承担一种相对独立的角色。这里的接口有两种不同的含义:一种是指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象;另一种是指某种语言具体的接口定义,有严格的定义和结构,比如Java语言中的interface。对于这两种不同的含义,ISP的表达方式以及含义都有所不同。

    我们来对上面的例子通过实现接口隔离原则进行二次改造:

     1     public class B : A1
     2     {
     3         public void Method1()
     4         {
     5             Console.WriteLine("需要用到方法1");
     6         }
     7 
     8         public void Method3()
     9         {
    10             Console.WriteLine("需要用到方法3");
    11         }
    12 
    13         public void Method4()
    14         {
    15             Console.WriteLine("需要用到方法4");
    16         }
    17  
    18     }
    19 
    20     public class C : A2
    21     {
    22         public void Method1()
    23         {
    24             Console.WriteLine("需要用到方法1");
    25         }
    26 
    27         public void Method2()
    28         {
    29             Console.WriteLine("需要用到方法2");
    30         }
    31 
    32         public void Method5()
    33         {
    34             Console.WriteLine("需要用到方法5");
    35         }
    36     }
    37 
    38 
    39 
    40     public interface A
    41     {
    42         void Method1();
    43      
    44     }
    45 
    46     public interface A1:A
    47     {
    48         void Method3();
    49         void Method4();
    50     }
    51 
    52 
    53     public interface A2 : A
    54     {
    55         void Method2();
    56         void Method5();
    57     }

         

  • 相关阅读:
    JavaWeb 之 表单重复提交问题
    JavaWeb 之 验证码
    JavaScript 之 AJAX 请求
    JavaWeb 之 i18N 国际化
    JavaWeb 之 Gson 的使用
    JavaScript 之 JSON 对象
    JavaWeb 之 由 Tomcat 展示友好的错误信息页面
    【LeetCode-动态规划】完全平方数
    【LeetCode-递归】至少有K个重复字符的最长子串
    【LeetCode-设计】常数时间插入、删除和获取随机元素
  • 原文地址:https://www.cnblogs.com/yangda/p/11910868.html
Copyright © 2020-2023  润新知