敏捷软件开发之接口隔离原则

接口隔离原则:
不应该强迫客户程序依赖并未使用的方法。

该原则是用来处理"胖"接口所存在的缺点。如果类的接口不是内聚的,就表示该类具有"胖"接口。

示例:
考虑一个安全系统。在这个系统中,有一些Door对象,可以被加锁和解锁,并且Door对象知道自己是开着还是关着,如下:

package com.pptb.design.patterns.isp;

public interface Door {
    void lock();
    void unLock();
    void isDoorOpen();
}

现在,考虑一个这样的实现,TimedDoor,如果门开着的时间过长,它就会发出警报声。为了做到这一点,TimedDoor需要和另外一个名为Timer的对象交互,如下:

public class Timer {
    public void register(int timeOut,TimerClient client){
        //TODO:
    }
}

public interface TimerClient {
    void timeOut();
}

如果让Door继承TimerClient,那TimedDoor就可以把自己注册到Timer接收TimeOut消息,但是这样就导致了Door类依赖于TimerClient了,然而并不是所有的Door都需要定时的功能,所以这种让Door继承TimerClient的设计违反了LSP原则。

所以我们使用委托来分离接口:

public interface Door {
    void lock();
    void unLock();
    void isDoorOpen();
}

public class Timer {
    public void register(int timeOut,TimerClient client){
        //TODO:
    }
}

public interface TimedDoor extends Door {
    void doorTimeOut();
}

public interface TimerClient {
    void timeOut();
}

public class DoorTimerAdapter implements TimerClient {

    private TimedDoor timedDoor;

    public DoorTimerAdapter(TimedDoor theDoor) {
        this.timedDoor = theDoor;
    }

    @Override
    public void timeOut() {
        this.timedDoor.doorTimeOut();
    }
}

如上使用DoorTimerAdapter类来分离接口。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面向对象的3个基本要素: 封装、继承、多态 面向对象的5个基本设计原则: 单一职责原则(Single-Respos...
    badcyc阅读 920评论 0 4
  • 推荐深度好文:原文链接,作者:张洋 序言 Perface “佛曰:苦海无涯,回头是岸。——佛教用语” 面向对象(O...
    不知公民阅读 805评论 0 4
  • 序言 “佛曰:苦海无涯,回头是岸。——佛教用语” 面向对象(Object-Oriented),这是一条令无数开发人...
    叶小健阅读 2,465评论 4 24
  • 最近工作上要做的事很多。因为平时闲的习惯了,加之这个工作之前也没做过,头脑里对工作内容没有任何轮廓和脉络。这会儿压...
    liangye阅读 203评论 0 0
  • 如果你对别人说:“请相信我”,别人会相信你吗? 今天是2017年5月23日,剽悍晨读给我们大家分享的书叫《给人好印...
    白色沙拉阅读 367评论 4 11