> For the complete documentation index, see [llms.txt](https://raozhanping.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://raozhanping.gitbook.io/notes/idea/idea-design-mode.md).

# 设计模式

* [设计模式](https://raozhanping.gitbook.io/notes/idea/pages/-LfccX4AklaY4PUhd0qR#设计模式)
  * [DIP、IoC、DI、JS](/notes/idea/idea-design-mode.md#dipiocdijs)
    * [依赖反转原则](https://raozhanping.gitbook.io/notes/idea/pages/-LfccX4AklaY4PUhd0qR#依赖反转原则)
    * [控制反转](https://raozhanping.gitbook.io/notes/idea/pages/-LfccX4AklaY4PUhd0qR#控制反转)
    * [依赖注入](https://raozhanping.gitbook.io/notes/idea/pages/-LfccX4AklaY4PUhd0qR#依赖注入)
  * [reference](/notes/idea/idea-design-mode.md#reference)

## DIP、IoC、DI、JS

### 依赖反转原则

> 依赖反转原则（Dependency inversion principle，DIP），是一种特定的解耦形式，使得高层次的模块不依赖于低层次的模块的实现细节，依赖关系被颠倒（反转），从而使得低层次模块依赖于高层次模块的需求抽象。———— 维基百科

该原则规定：\
1\. 高层次的模块不应该依赖与低层次的模块，两者都应该依赖于抽象接口。\
2\. 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口

**DIP 只是解决了高层次模块直接依赖低层次模块的问题, 但是存在依赖关系创建于高层次模块的问题**

### 控制反转

> 控制反转（Inversion of Control，IoC），通过控制反转，对象在被创建的时候，有一个控制系统内所有对象的外界实体，将其所依赖的对象的引用传递给它。可以说，依赖被注入到对象中。———— 维基百科

将依赖对象的创建和绑定转移到被依赖对象类的**外部**来实现。实现控制反转最常见的方式是依赖注入，还有一种方式依赖查找

### 依赖注入

> 依赖注入（Dependency Injection，DI），在软件工程中，依赖注入是种实现控制反转用于解决依赖性设计模式。一个依赖关系指的是可被利用的一种对象（即服务提供端）。依赖注入是将所依赖的传递给将使用的从属对象（即客户端）。该服务将会变成客户端的状态的一部分。传递服务给客户端，而非允许客户端来建立或寻找服务，是本设计模式的基本要求

把过程放在外面，将结果带入内部.**对于依赖模块的模块，则把依赖作为参数使用**

## reference

* [从前端角度彻底搞懂 DIP、IoC、DI、JS](https://zhuanlan.zhihu.com/p/61018434)
*
