http://www.cnblogs.com/xiaozhi_5638/p/3613176.html
依赖倒置原则(Dependency Inversion Principle)为我们提供了降低模块间耦合度的一种思路,依赖注入(Dependency Injection)是一种具体的实施方法。
依赖倒置原则:
前面一篇讲软件设计原则的文章中已经提到了“依赖倒置原则”(Dependency Inversion Principle),该原则主要是为了降低模块与模块之间的“耦合度”,提倡模块与模块之间不要发生直接的依赖关系,即:高层模块不应该直接依赖于低层模块,高层模块和低层模块应该同时依赖一个抽象层。如果现在有一个类Manager在处理某一任务时,需要记录错误日志,那么我们可以这样编写代码:
- 1 class Manager
- 2 {
- 3 //…
- 4 FileLogger _logger;
- 5 public void DoSomething()
- 6 {
- 7 try
- 8 {
- 9 …do something
- 10 }
- 11 catch(Exception ex)
- 12 13 if(_logger == null)
- 14 {
- 15 _logger = new FileLogger();
- 16 }
- 17 _logger.Log(ex.ToString())
- 18 19 }
- 20 }
- 21 FileLogger
- 22 23 void Log(string errorLog)
- 24 25 …write into log file
- 26 27 }
如上代码所示,FileLogger类负责将错误日志保存到文件,Manager类中定义了一个Logger类对象,专门负责记录错误日志,这段代码中的“高层模块”Manager类就直接依赖与“低层模块”FileLogger,如果我们现在需要将错误日志记录通过Email发送给别人,或者发送给别的模块,我们不得不去修改Manager类的代码。
“依赖倒置原则”建议我们,Manager类不应该直接依赖于FIleLogger类,而应该依赖一个抽象层(接口层),所以原来代码应该这样写: