Java

[Java] Dependency injection和Serv

2016-03-08  本文已影响116人  何幻

依赖倒置原则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);
上一篇下一篇

猜你喜欢

热点阅读