本文主要是介绍依赖倒置和控制反转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
依赖倒置
定义
依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦形式,使得高层次的类不依赖于低层次的类的实现细节,依赖关系被颠倒(反转),从而使得低层次类依赖于高层次类的需求抽象。
该原则规定:
- 高层次的类不应该依赖于低层次的类,两者都应该依赖于抽象接口。
- 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。
在传统的应用架构中,低层次的组件设计用于被高层次的组件使用,这一点提供了逐步的构建一个复杂系统的可能。在这种结构下,高层次的组件直接依赖于低层次的组件去实现一些任务。这种对于低层次组件的依赖限制了高层次组件被重用的可行性。
依赖反转原则的目的是把高层次组件从对低层次组件的依赖中解耦出来,这样使得重用不同层级的组件实现变得可能。
听起来很干,我们先通过实现一个简单的需求来描述依赖倒置原则要解决的问题。
需求
假设我们要实现一个简单的缓存功能,主要负责把数据存储起来方便以后调用。
为了快速完成需求,我们决定采用最简单的实现方式:存储到文件,所以我们设计其结构如下:
图 1 显示在应用程序中一共有两个类。“Cache” 类负责调用"FileWrite"类来写入文件。代码实现如下:
<?phpclass FileWriter{public function writeToFile($key,$value=null){//....}
}class Cache{protected FileWriter $file_writer;public function __contruct(){$this->file_writer=new FileWriter();}public function set($key,$value=null){$this->file_writer->writeToFile($key,$value);}
}
在所有使用文件来作为存储方式的系统中,上面的"Cache"类能很好的使用,然而在以其他方式来存储的系统中,“Cache” 类是无法被重用的。
例如,假设我们的系统是分布式服务,部署在多台机器上,这时候如果使用文件存储则缓存只能生效于本机器上,无法被其他机器使用,故我们无法使用文件来作为缓存的存储方式,所以我们引入一个新的存储方式:redis。另外我们也希望复用 “Cache” 类,但很不幸的是, “Cache” 类是直接依赖于 “FileWrite” 类的,无法直接被重用。
为了解决这个问题,我们需要修改下代码,如下:
<?phpclass FileWriter{public function writeToFile($key,$value=null){//....}
}class RedisWriter{public function writeToRedis($key,$value=null){//....}
}
class Cache{protected
这篇关于依赖倒置和控制反转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!