Java筹划模式—面向对象筹划原则(四) ----->接口隔离原则(ISP) (完整详解 ...

打印 上一主题 下一主题

主题 1018|帖子 1018|积分 3054

3.4 接口隔离原则(ISP)

接口隔离原则:Interface Segregation Principle,简称ISP
3.4.1 概述

客户端测试类不应该被迫依靠于它不使用的方法;一个类对另一个类的依靠应该建立在最小的接口上。
3.4.2 案列

面看一个例子来理解接口隔离原则:
【例】安全门案例
需求:创建一个学校品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

  1. // 防盗门
  2. public interface SafetyDoor {
  3.     //防盗功能
  4.     public abstract void antiTheft();
  5.     // 防火功能
  6.     public abstract void fireproof();
  7.     // 防水功能
  8.     public abstract void waterproof();
  9. }
  10. ==========================================================
  11.   //学校防盗门类 实现防盗门接口
  12.   public class SchoolDoor implements SafetyDoor {
  13.     @Override
  14.     public void antiTheft() {
  15.         System.out.println("防盗");
  16.     }
  17.     @Override
  18.     public void fireproof() {
  19.         System.out.println("防火");
  20.     }
  21.     @Override
  22.     public void waterproof() {
  23.         System.out.println("防水");
  24.     }
  25. }
  26. ============================================================
  27.   public class ClientTest {
  28.     public static void main(String[] args) {
  29.         // 创建学校防盗门对象
  30.         SchoolDoor schoolDoor = new SchoolDoor();
  31.         // 调用方法实现防盗门的功能
  32.         schoolDoor.antiTheft();
  33.         schoolDoor.waterproof();
  34.         schoolDoor.fireproof();
  35.     }
  36. }
复制代码
上述代码看似实现了需求的功能,但是假如参加新增一个家庭品牌的安全门,有防盗功能和防火功能,此时假如再界说一个家庭安全门类去实现安全门的接口会造立室庭安全门被迫去实现防水功能,这就违反了接口隔离原则。
根据接口隔离原则,改进如下:

  1. // 防盗接口
  2. public interface AntiTheft {
  3.     public abstract void antiTheft();
  4. }
  5. ===========================================================
  6.   // 防火接口
  7. public interface Fireproof {
  8.     public abstract void fireproof();
  9. }
  10. ===========================================================
  11.   // 防水接口
  12. public interface Waterproof {
  13.     public abstract void waterproof();
  14. }
  15. ==========================================================
  16.   //创建学校防盗门,实现该有功能的接口
  17. nmpublic class SchoolDoor implements AntiTheft,Fireproof,Waterproof{
  18.     @Override
  19.     public void antiTheft() {
  20.         System.out.println("防盗");
  21.     }
  22.     @Override
  23.     public void fireproof() {
  24.         System.out.println("防火");
  25.     }
  26.     @Override
  27.     public void waterproof() {
  28.         System.out.println("防水");
  29.     }
  30. }
  31. =========================================================
  32.   //新增家庭品牌安全门 实现该有功能的接口
  33.   public class HomeDoor implements AntiTheft,Fireproof{
  34.     @Override
  35.     public void antiTheft() {
  36.         System.out.println("防盗");
  37.     }
  38.     @Override
  39.     public void fireproof() {
  40.         System.out.println("防火");
  41.     }
  42. }
  43. ===========================================================
  44.   public class ClientTest {
  45.     public static void main(String[] args) {
  46.         // 创建学校防盗门
  47.         SchoolDoor s = new SchoolDoor();
  48.         // 实现学校防盗门功能
  49.         s.fireproof();
  50.         s.waterproof();
  51.         s.antiTheft();
  52.       
  53.         // 创建家庭品牌安全门
  54.         HomeDoor homeDoor = new HomeDoor();
  55.         //实现家庭品牌安全门的功能
  56.         homeDoor.antiTheft();
  57.         homeDoor.fireproof();
  58.     }
  59. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表