MyException - 我的异常网
当前位置:我的异常网» 综合 » 触类旁通——深入了解面向对象设计原则“依赖倒转原

触类旁通——深入了解面向对象设计原则“依赖倒转原则”

www.MyException.Cn  网友分享于:2013-10-11  浏览:0次
融会贯通——深入了解面向对象设计原则“依赖倒转原则”

一千个人眼里有一千个哈姆雷特,下面我尝试用深入浅出的语言贯穿到“控制反转”,“依赖注入”,“面向抽象编程”,以及“面向接口编程”这几个概念。

 

传递参数,关联(组合&聚合)关系时,要尽量引用高层次的抽象类,使用基类和接口进行变量类型的声明,参数类型的声明,数据类型转换(也是向高层次的抽象类转),而不要用具体的子类。

以上总结为“控制反转”,也叫“面向抽象编程”。

 

真到了要使用具体子类的时候,采用“依赖注入”的方式:

  • 构造注入,通过构造函数传入具体类的对象
  • setter注入,通过setter方法传入具体类的对象
  • 接口注入,通过在接口中声明的业务方法,来传入具体类的对象作为方法的参数

  ——> 引申到“面向接口编程”的概念,接口的意思就是“如果你是***的话,你能干嘛?”,接口中定义的是能干嘛,具体怎么干不告诉你,等你是了(即实现该接口)自己去想具体怎么干。

接口是抽象概念的一种,当你在面向抽象编程时,传递参数,关联关系,使用的是接口来声明变量类型,参数类型以及数据类型转换,而不是具体的类,这就是面向接口编程。

所以,总结出这些概念的关系是,面向对象编程的中心思想是面向抽象编程,而面向接口编程是面向抽象编程的一种。

 

那么问题又来了,如果面向接口编程只是面向抽象的一种,那么另一种是什么呢?

另一种就是抽象基类,要注意区分这里的基类的概念,它包含abstract关键字的class,也包含普通父类(普通父类也是其众多子类的抽象化身),这里主要多说一下abstract class,它很容易与接口混淆,那么abstract class与接口的区别是什么?

  • abstract class可以包含有方法体的非抽象方法,可以包含任意作用域的成员数据。而接口一般不使用成员数据(即使有也是自动转为public static final类型),接口的所有方法都是没有方法体的抽象方法(接口内部不用abstract关键字)。
  • abstract class是对属性,行为的抽象,同时也可以有自己的具体方法。而接口只是对行为的抽象,接口更像是abstract class的特殊情况。
  • 这两种不同的抽象概念更好的支持了Java多态(一个基类可以有很多子类is-a,一个类可以实现很多接口like-a)。abstract class仍然是个类,必须是相同种族抽象出来的类,例如动物类,熊猫类,而接口只是对行为的抽象,不管谁实现他,也不管他们是否是一个种族,例如动物和汽车都可以跑,那他们都可以实现具有“跑”行为的接口,对于接口本身来讲,他并不关心你是动物还是汽车,他只管定义他的“跑”就行了。

 

依赖倒转原则,总结一句话就是定义时用抽象类型(基类或者接口),运行时注入具体类型。

开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段。

 

文章评论

Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
 程序员的样子
程序员的样子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
代码女神横空出世
代码女神横空出世
程序员的鄙视链
程序员的鄙视链
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
中美印日四国程序员比较
中美印日四国程序员比较
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
总结2014中国互联网十大段子
总结2014中国互联网十大段子
那些争议最大的编程观点
那些争议最大的编程观点
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我是如何打败拖延症的
我是如何打败拖延症的
Java程序员必看电影
Java程序员必看电影
旅行,写作,编程
旅行,写作,编程
程序员和编码员之间的区别
程序员和编码员之间的区别
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
鲜为人知的编程真相
鲜为人知的编程真相
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
如何成为一名黑客
如何成为一名黑客
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
10个调试和排错的小建议
10个调试和排错的小建议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
为什么程序员都是夜猫子
为什么程序员都是夜猫子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
编程语言是女人
编程语言是女人
每天工作4小时的程序员
每天工作4小时的程序员
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员都该阅读的书
程序员都该阅读的书
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
一个程序员的时间管理
一个程序员的时间管理
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有