依赖注入模式:
客户端类等待注入器创建其依赖的服务类的对象并将其赋值给自身的成员变量;
依赖注入意义:
保证客户类仅仅与其依赖的服务类耦合,而不与服务类的子类型耦合,使得程序符合OCP或依赖于抽象类型原则;
不需声明全局公共的服务类对象,而是通过 依赖注入(伸手-等待)来获取:
1,在接受注入时声明所依赖的服务对象(伸手);
2,框架会在初始化时将对象传递进来(等待)。
注入方式:
1,构造器注入
Client类提供构造器public Client(IServer s),优点是创建Client对象时,确保IServer对像被初始化;
2,Setter注入
Client类提供方法如set IServer(IServer s),优点是可以灵活的要求外界完成注入;
3,接口注入
应用于有大量的Client类都需要依赖于IServer时;
构造注入器:
因为注入器通常使用反射机制创建对象,作为通用工具,因此简单构造器可以设计为下层包中的一个工具类:
- publicclassApp{
- staticvoidtest(){
- IServers=(IServer)God.create();
- Clientc=newClient();
- c.setIServer(s);
- c.show();
- }
- }
更为强大的依赖注入容器如Spring、PicoContainer等,它们认为使用依赖注入是面向对象编程基本的程序结构,因此其中各种各样的使用关系广泛存在。
其他:
依赖注入模式、依赖注入容器、设计依赖注入容器所需的技术(回调机制或控制反转)可以是三个不同的东西。