【设计模式攻略】OO设计原则之ISP-接口隔离原则
2012-04-01 16:33
369 查看
概要
所谓接口隔离,就是把可以分离的方法分离到不同的接口类中,防止在实际应用中被迫去实现一些本并不需要的接口方法。其实一定程度上跟SRP原则类似。只是ISP更关注与接口实现和使用,而SRP更关注于接口本身。
目的
接口用户不应该被迫去实现和依赖一些本不会使用的接口方法。
实例与效果
假设我们需要实现通信的接口,基于通信的一些基本功能,我们可能会设计这样的接口:
貌似Perfect!然后我们继承于IComm 的实现接口方法。
这时有个客户类是这样的,
客户只需要收发消息的功能,而不需要监听和连接的功能,也就是说对于SetCommHandler方法,其实只需要设定实现了收发消息接口方法的对象,而如上的结果是,所有类的实现都必须实现IComm 接口的所有方法。这时对传递给SetCommHandler的参数对象中其实存在了多余的接口,造成接口污染。
怎么改进呢?重新设计接口。
如果当前需求只需要收发消息,可以考虑只实现IComm,如果两种需求都有就都实现。
可以发现,如此设计后暴露给只需要收发功能的Client类的只有IComm下的接口,而当面对特定需求时,你也不需要去实现一些冗余的接口。比如SMessage类就只需要去实现Receive/Send方法。
应用
实际应用中,也可以通过委托机制来实现接口隔离,参照Adapt模式。
所谓接口隔离,就是把可以分离的方法分离到不同的接口类中,防止在实际应用中被迫去实现一些本并不需要的接口方法。其实一定程度上跟SRP原则类似。只是ISP更关注与接口实现和使用,而SRP更关注于接口本身。
目的
接口用户不应该被迫去实现和依赖一些本不会使用的接口方法。
实例与效果
假设我们需要实现通信的接口,基于通信的一些基本功能,我们可能会设计这样的接口:
class IComm { public: virtual void Connect() = 0; virtual void Listen() = 0; virtual void Receive() = 0; virtual void Send() = 0; };
貌似Perfect!然后我们继承于IComm 的实现接口方法。
class SComm : public IComm{ ...... }; class SMessage : public IComm{ ...... }; class SConnect : public IComm{ ...... };
这时有个客户类是这样的,
class Client { void SetCommHandler(IComm* comm); voidReceive() { comm->Receive();} void Send() { comm->send();} };
客户只需要收发消息的功能,而不需要监听和连接的功能,也就是说对于SetCommHandler方法,其实只需要设定实现了收发消息接口方法的对象,而如上的结果是,所有类的实现都必须实现IComm 接口的所有方法。这时对传递给SetCommHandler的参数对象中其实存在了多余的接口,造成接口污染。
怎么改进呢?重新设计接口。
class IConnect { public: virtual void Connect() = 0; virtual void Listen() = 0; }; class IComm { virtual void Receive() = 0; virtual void Send() = 0; };
如果当前需求只需要收发消息,可以考虑只实现IComm,如果两种需求都有就都实现。
class SComm : public IComm, IConnect { ...... }; class SMessage : public IComm{ ...... }; class SConnect : public IConnect{ ...... };
可以发现,如此设计后暴露给只需要收发功能的Client类的只有IComm下的接口,而当面对特定需求时,你也不需要去实现一些冗余的接口。比如SMessage类就只需要去实现Receive/Send方法。
应用
实际应用中,也可以通过委托机制来实现接口隔离,参照Adapt模式。
相关文章推荐
- IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)
- IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)
- 设计模式原则(4)--Interface Segregation Principle(ISP)--接口隔离原则
- 设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP
- 设计模式无限重读之接口隔离原则(ISP)
- IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)
- IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)
- 举例说明Java设计模式编程中ISP接口隔离原则的使用
- java设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式---->接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- [设计模式]面向对象设计原则之接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(4):接口隔离原则
- 6大设计模式(四)----接口隔离原则