敏捷软件开发学习随笔(六)

接口隔离原则(ISP)

这个原则适用于解决“胖”接口的缺点。类的“胖”接口可以分解成多组方法,而每组方法对应于不同的客户程序。使得客户程序之间可以互不干扰。

接口污染

每当在子类中添加方法,使得基类中也要加入该方法,使得基类变“胖”,那么就是产生了接口污染。因为基类中每加入一个方法,派生类就必须实现或者定义一个缺省实现,带来维护和重用方面的问题。

分离客户就是分离接口

当部分用户需要新增某些特定功能时,他们使用的接口就得增添新的东西,而其他不需要用到这些特定功能的用户则会受到影响,使得他们必须知道一些对他们完全无用的东西。而当那个特定功能出现了bug,也会影响到其他不需要此功能的用户。故而分离.不同的用户就是分离接口。

接口隔离原则

如果强行让客户程序依赖自己不需要使用的方法,那么当这些方法改动时,客户程序也会因此受到影响。这就导致了客户程序之间的耦合。

类接口与对象接口
  1. 使用委托分离接口
    示例:
    我们有一个门(door)的类
    class door
    {
    public:
    virtual bool openDoor() = 0;
    virtual void closeDoor() = 0;
    virtual bool isOpenDoor() = 0;
    }
    现在部分用户需要它会自动关门,那么我们就需要一个时间类来检测时间与门来交互
    class timeSystem
    {
    public:
    void register(int timeOver, timeSystemClient);
    }
    class timeSystemClient
    {
    public:
    virtual void timeOver() = 0;
    }
    此时创建一个派生自timeSystemClient的对象,并把该对象的请求委托给door的派生类timeDoor。
    class timeDoor:public door
    {
    public:
    virtual void doorTimeOver(int timeOverID);
    }
    class doorTimeSystemAdapter:public timeSystemClient
    {
    public:
    doorTimeSystemAdapter:public (timeDoor& theDoor):itsTimeOverDoor(theDoor)
    {}
    vistual void timeOver(int timeOverID)
    {
    itsTimeOverDoor.doorTimeOver(timeOverID);
    }
    private:
    timeDoor& itsTimeOverDoor;
    }
    这种方法遵循了ISP原则,缺点每次想注册一个超时请求就得创建一个新对象。
  2. 使用多重继承分离接口
    class timeDoor:public door,public timeSystemClient
    {
    public:
    virtual void doorTimeOver(int timeOverID);
    }
    这样处理则使得两个基类的客户都可以使用timeDoor,但是都不依赖timeDoor,从而达到分离的接口使用同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值