依赖注入dependency injection

本文探讨了面向对象设计中的开放关闭原则(OCP)及策略模式,并介绍了如何通过客户类和服务类实现良好的封装性和扩展性。此外,还详细解释了三种依赖注入的方法:Setter模式、Constructor模式和Factory模式。

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

  • 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/archive/2013/04/10/3012871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值