目录
1、基本介绍
2、应用实例
2.1、需求
2.2、传统方式
2.2.1、类图
2.2.2、代码
2.2.3、传统方式分析
2.3、遵循依赖倒置原则解决问题
2.3.1、类图
2.3.2、代码
2.3.3、遵循依赖倒置原则分析
3、依赖关系传递的三种方式
3.1、接口传递
3.2、构造方法传递
3.3、setter方式传递
4、依赖倒置原则的注意事项和细节
有一个手机Phone,手机上面有多个APP,每个APP有自己的打开方式。
编程实现手机与APP的打开方式的交互。
类图分析: Client是客户端,需要创建Phone实例、TaoBao、QQ等应用实例,然后调用应用的打开方法
/*** 客户端*/
public class Client {public static void main(String[] args) {Phone phone = new Phone();phone.openAppQQ(new QQ());phone.openAppTaoBao(new TaoBao());}
}class Phone{public void openAppQQ(QQ qq){qq.open();}public void openAppTaoBao(TaoBao taoBao){taoBao.open();}
}class QQ{public void open(){System.out.println("QQ打开了。。。");}
}class TaoBao{public void open(){System.out.println("TaoBao 打开了。。。");}
}
这种方式可以完成需求,但是不利于扩展。比如现在手机安装了一个WeiXin,那么就要加一个WeiXin类,而且Phone类中还要添加WeiXin的打开方法。
解决方式:遵循依赖倒置原则设计程序
/*** 客户端*/
public class Client {public static void main(String[] args) {Phone phone = new Phone();phone.openApp(new QQ());phone.openApp(new TaoBao());}
}interface App{public void open();
}class Phone{public void openApp(App app){app.open();}
}class QQ implements App{@Overridepublic void open(){System.out.println("QQ打开了。。。");}
}class TaoBao implements App{@Overridepublic void open(){System.out.println("TaoBao 打开了。。。");}
}
如类图所示,现在Phone与每一个具体的APP()之间没有了直接的关系,如果要下载一个微信,只需要写一个WeiXin类去实现App接口并实现其open()方法即可。
不论增加或减少多少个App,都不会再改变Phone类。
简单一句话说:在开发过程中尽可能的依赖抽象层(接口/抽象类)而不是依赖实现层(类)。
这样可以很好地提高程序的扩展性和维护性。
上面的例子使用的就是接口传递方式
修改Phone为构造方法传递即可:
class Phone{private App app;public Phone(App app){this.app = app;}public void openApp(){this.app.open();}
}
修改Phone为settrt方式传递即可
class Phone{private App app;public void setPhone(App app){this.app = app;}public void openApp(){if(this.app != null){this.app.open();}}
}
本文发布于:2024-01-27 17:02:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063461161528.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |