接口隔离原则就是客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。(百度百科概念)。看着可能比较懵逼。简单的说就是应该使用多个接口,而不是一个包含所有方法的接口。举个例子:在单一职责原则和开闭原则里我们分别创建了WeChatMsgHandler和WeChatEventHandler接口。如果我们只创建一个接口:
public interface WeChatMsgHandelr{
String msgHandelr(WechatMsg wechatMsg);
String eventHandelr(WechatMsg wechatMsg);
}
我们在处理事件消息的时候可以用到eventHandelr方法,但是我们处理文本消息,图片消息时 eventHandelr方法明显是多余的,并没有用到该方法。因此我们使用两个接口分别处理:
public interface WeChatMsgHandelr{
String msgHandelr(WechatMsg wechatMsg);
}
public interface WeChatEventHandelr{
String eventHandelr(WechatMsg wechatMsg);
}
接口隔离原则符合我们常说的高内聚低耦合的设计思想,可以使类具有很好的可读性,可扩展性和可维护性。我们在设计接口的时候要多花时间去思考,考虑业务模型,包括有可能发生变更的地方。
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。(恩,也是百度百科说的)。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。还是以处理微信消息为例子,创建一个微信消息处理类:
public class WeChatMsgService{
public String textMsgHandler() {
//TODO
}
public String ImageMsgHandler() {
//TODO
}
}
如果我们想要新增语音和视频消息处理,那么就需要在原类中添加处理语音消息和视频消息的方法,因为业务扩展,要从底层到高层(调用层)依次修改代码。如此以来,系统发布之后,实际上是不稳定的,再修改代码的同时也会带来意想不到的风险。接下来我们优化代码,创建一个抽象WeChatMsgHandler的接口,接口最上面的例子,然后再编写消息处理类:
public class TextMsgHandler implements WeChatMsgHandler {
@Override
public String MsgHandler(WxMpXmlMessage weChatMsg) {
//TODO
}
}
public class VoiceMsgHandler implements WeChatMsgHandler {
@Override
public String MsgHandler(WxMpXmlMessage weChatMsg) {
//TODO
}
}
public class ImageMsgHandler implements WeChatMsgHandler {
@Override
public String MsgHandler(WxMpXmlMessage weChatMsg) {
//TODO
}
}
这个时候无论想新增处理什么样的消息,都无需修改底层代码,只需要新增一个类即可。再结合依赖注入方式,完全不需要修改调用者部分代码。
本文探讨了接口隔离原则和依赖倒置原则在软件设计中的应用,强调了高内聚低耦合的设计思想,通过实例说明如何优化微信消息处理类,减少类间耦合,提高代码可读性和可维护性。
2279

被折叠的 条评论
为什么被折叠?



