依赖注入dependency injection

首先说基于面向对象的以下两个设计原则,不能把所有事情封装到一个类中:

  • OCP原则,即开放关闭原则,指设计应该对扩展开放,对修改关闭。
  • 策略模式,英文名Strategy Pattern,指定义算法族,分别封装起来,让他们之间可以相互替换,此模式使得算法的变化独立于客户

而应该创建客户类和服务类,客户类将引用服务类以接受具体的服务,而服务类可能有多种,所以客户类中最好引用的是众多服务类的一个接口类型的实例,通过接口实例实现具体服务方法的调用。

该接口实例可以通过以下三种方法实现在客户类中的实例化(依赖注入):

  1. Setter模式

通过一个客户类中的一个带参的set方法将服务类实例化后传入

优点是灵活,客户类实例化后仍可改变服务类型,缺点是上下文中存在的set方法调用代码较多;

     2。Constructor模式

通过客户类中的一个带参构造函数将服务类实例化后传入

灵活度中等,每一个客户类实例有且只能有一种服务类型,即一旦实例化后服务类型不能再改变

     3。Factory模式

客户类可以通过一个FactoryContainer类的静态方法主动获取需要服务类实例,具体有两种:

    • AbstractFactory,多种Factory继承该AbstractFactory接口,通过FactoryContainer的静态方法根据XML配置文件中的配置来选择生产哪一种服务类实例;
    • ReflectionFactory:直接根据XML配置文件中的配置通过反射机制来选择生产哪一种服务类实例;

优点为上下文代码中完全不用再写为客户类进行依赖注入的代码,缺点为只能通过配置文件来调整具体的服务类型,适用于数据连接层(比如SQLServer,Oracle等数据库类型选择)

原文地址:https://www.cnblogs.com/Finding2013/p/3012871.html