大兴网站定制开发房地产招新人的坑
news/
2025/9/26 13:51:31/
文章来源:
大兴网站定制开发,房地产招新人的坑,进入百度搜索首页,如何在服务器上关闭网站依赖倒转原则
在大话设计模式这本书中#xff0c;作者通过电话修电脑这个例子引入了面向对象设计的基本原则之一#xff1a;依赖倒转原则。
概念
依赖倒转原则是面向对象设计的基本原则之一#xff0c;它用于减少类之间的耦合#xff0c;提高系统的灵活性和可维护性。在…依赖倒转原则
在大话设计模式这本书中作者通过电话修电脑这个例子引入了面向对象设计的基本原则之一依赖倒转原则。
概念
依赖倒转原则是面向对象设计的基本原则之一它用于减少类之间的耦合提高系统的灵活性和可维护性。在书中依赖倒转原则的原话解释是抽象不应该依赖细节细节应该依赖于抽象。它的主要内容可以分为两个部分
高层模块不应该依赖低层模块。两者都应该依赖其抽象。抽象不应该依赖于细节。细节应该依赖于抽象。 简单点说就是我们在编程的时候要依赖于抽象接口或抽象类不要依赖于具体的类对象。
这一原则与我们前文中所讲解的里氏代换原则相辅相成当我们满足里氏代换原则时子类能够完全替换父类。而满足依赖倒转原则时细节依赖于抽象抽象类一般是父类。因此当同时遵循这两个原则的时候我们的代码就能够通过子类灵活的进行扩展。
例子
光讲上面的概念可能难以理解其中的含义这里举一个具体的例子。
假设我们正在开发一个新闻应用这个应用有一个NewsService类它负责从不同的新闻源获取新闻。一开始我们只从网络获取新闻所以我们可能会有以下的设计
class NewsService {NetworkNewsFetcher fetcher;NewsService() {this.fetcher new NetworkNewsFetcher();}ListNews getNews() {return fetcher.fetch();}
}class NetworkNewsFetcher {ListNews fetch() {// fetch news from the network}
}
在这个设计中NewsService直接依赖于NetworkNewsFetcher这意味着如果我们想从其他来源如本地文件获取新闻我们就需要修改NewsService的代码。 现在让我们按照依赖倒转原则来重新设计这个系统
interface NewsFetcher {ListNews fetch();
}class NewsService {NewsFetcher fetcher;NewsService(NewsFetcher fetcher) {this.fetcher fetcher;}ListNews getNews() {return fetcher.fetch();}
}class NetworkNewsFetcher implements NewsFetcher {Overridepublic ListNews fetch() {// fetch news from the network}
}class LocalNewsFetcher implements NewsFetcher {Overridepublic ListNews fetch() {// fetch news from a local file}
}
在这个新的设计中NewsService依赖于NewsFetcher接口而不是具体的NetworkNewsFetcher类。这样我们就可以在不修改NewsService的代码的情况下通过添加新的NewsFetcher实现如LocalNewsFetcher来扩展系统的功能。这个例子是通过代码来解释依赖倒转原则能够帮助有一定编程基础的同学能够更加清晰地体会到依赖倒转原则的优点。
优缺点
在大话设计模式中有这样一句话可以把PC电脑理解成是大的软件系统任何部件如CPU、内存、硬盘、显卡等都可以理解为程序中封装的类或程序集由于PC易插拔的方式那么不管哪一个出问题都可以在不影响别的部件的前提下进行修改或替换。
在这句话中 PC电脑依赖于CPU、内存、硬盘、显卡等硬件设备而这些硬件损坏的时候我们能够很方便的对其进行更换这就依赖于PC易插拔的方式。我们可以思考一个这样的问题PC易插拔的方式是怎么做到的其实就是因为它遵循了依赖倒置原则严格意义上来讲PC电脑所依赖的并不是具体的某一块CPU、内存、硬盘、显卡等硬件设备而是依赖能够插进主板插槽的硬件设备。而这个主板预留出的插槽其实就是我们前面所谓的“抽象”接口或抽象类只有主板依赖于插槽这些硬件的生产厂商再根据插槽的形状去做对应的硬件才能够实现PC易插拔。否则 如果PC依赖的具体的某一块CPU、内存、硬盘、显卡等硬件设备那如果硬件设备坏了就得整个PC都换掉因为PC只“用得惯”这一块硬件。
因此总结一下依赖倒转原则的优点它使我们的代码更加灵活更容易扩展和维护。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917007.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!