欢迎来到天天文库
浏览记录
ID:14285186
大小:41.00 KB
页数:3页
时间:2018-07-27
《开闭原则和依赖倒置的例子java》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、开闭原则、依赖倒置原则例子:核心思想是面向接口编程,用一个例子来说明面向接口编程比相对于面向实现编程好在什么地方。场景是这样的,母亲给孩子讲故事,只要给她一本书,她就可以照着书给孩子讲故事了。代码如下:1.class Book{ 2. public String getContent(){ 3. return "很久很久以前有一个阿拉伯的故事……"; 4. } 5.} 6. 7.class Mother{ 8. public void narrate(Book book){ 9. System.out.println("妈妈
2、开始讲故事"); 10. System.out.println(book.getContent()); 11. } 12.} 13. 14.public class Client{ 15. public static void main(String[] args){ 16. Mother mother = new Mother(); 17. mother.narrate(new Book()); 18. } 19.} 运行结果:妈妈开始讲故事很久很久以前有一个阿拉伯的故事…… 运行良好,假如
3、有一天,需求变成这样:不是给书而是给一份报纸,让这位母亲讲一下报纸上的故事,报纸的代码如下:1.class Newspaper{ 2. public String getContent(){ 3. return "林书豪38+7领导尼克斯击败湖人……"; 4. } 5.} 这位母亲却办不到,因为她居然不会读报纸上的故事,这太荒唐了,只是将书换成报纸,居然必须要修改Mother才能读。假如以后需求换成杂志呢?换成网页呢?还要不断地修改Mother,这显然不是好的设计。原因就是Mother与Book之间的耦合性太高了,必须降低他们之间的耦合
4、度才行。我们引入一个抽象的接口IReader。读物,只要是带字的都属于读物:1.interface IReader{ 2. public String getContent(); 3.} Mother类与接口IReader发生依赖关系,而Book和Newspaper都属于读物的范畴,他们各自都去实现IReader接口,这样就符合依赖倒置原则了,代码修改为:[java] viewplaincopy1.class Newspaper implements IReader { 2. public String getContent(){ 3. return
5、 "林书豪17+9助尼克斯击败老鹰……"; 4. } 5.} 6.class Book implements IReader{ 7. public String getContent(){ 8. return "很久很久以前有一个阿拉伯的故事……"; 9. } 10.} 11. 12.class Mother{ 13. public void narrate(IReader reader){ 14. System.out.println("妈妈开始讲故事"); 15. System.out.pri
6、ntln(reader.getContent()); 16. } 17.} 18. 19.public class Client{ 20. public static void main(String[] args){ 21. Mother mother = new Mother(); 22. mother.narrate(new Book()); 23. mother.narrate(new Newspaper()); 24. } 25.} 运行结果:妈妈开始讲故事很久很久以前有一个阿拉伯的故事……妈妈
7、开始讲故事林书豪17+9助尼克斯击败老鹰…… 这样修改后,无论以后怎样扩展Client类,都不需要再修改Mother类了。这只是一个简单的例子,实际情况中,代表高层模块的Mother类将负责完成主要的业务逻辑,一旦需要对它进行修改,引入错误的风险极大。所以遵循依赖倒置原则可以降低类之间的耦合性,提高系统的稳定性,降低修改程序造成的风险。
此文档下载收益归作者所有