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