[Java] Dependency injection和Service locator

依赖倒置原则DIP:
高层模块不应该直接依赖于低层模块,两者应该都依赖于抽象。

Person person=new Persion();
person.eat(new Noodle());

public void eat(Noodle noodle){}    //违反依赖倒置原则
public void eat(Food food){}    //DIP:依赖于抽象的interface Food

控制反转IoC:(DIP的一种实现)
为相互依赖的组件提供抽象,将依赖对象(低层模块)的获得交给第三方(系统)来控制,即依赖对象不在被依赖模块的类中直接通过new来获取

依赖注入DI:(IoC的一种实现)
将依赖对象的创建和绑定转移到被依赖对象类的外部来实现。
把依赖的对象当做参数传进去。(构造函数注入,属性注入,接口注入)

Person person=new Person();
person.food=new Noodle();    //属性注入
person.eat();

服务定位器Service Locator:(IoC的一种实现)
将构建依赖的接口彻底与依赖者分离,并将此依赖作为“服务”绑定到一个标识符(通常是一个字符串),而后依赖者则可通过这个标识符获取被绑定的依赖。

Person person=new Person();
ServiceLocatorserviceLocator=new ServiceLocator();
Food food=serviceLocator.get(food);
person.eat(food);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容