zoukankan      html  css  js  c++  java
  • 依赖注入dependency injection

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

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

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

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

    1. Setter模式

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

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

         2。Constructor模式

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

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

         3。Factory模式

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

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

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

  • 相关阅读:
    golang不想http自动处理重定向的解决方案
    学习WebDav
    keepass+坚果云管理我的密码
    定制右键功能,看这一篇就够了
    翻转二叉树
    加密sqlite3数据库文件
    算出cron表达式接下来几次执行时间
    关于斐波那契数列的3种解法
    golang通过cgo调用lua
    学习go语言并完成第一个作品
  • 原文地址:https://www.cnblogs.com/Finding2013/p/3012871.html
Copyright © 2011-2022 走看看