当前位置: 首页 > news >正文

旅游网站建设价格通信工程建设网站

旅游网站建设价格,通信工程建设网站,网站怎么更换服务器,公司做网站比较好目录1 依赖倒置原则2 依赖倒置应用1 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。…

目录

  • 1 依赖倒置原则
  • 2 依赖倒置应用


1 依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。接下来看一个案例,还是以课程为例,先来创建一个类 Oldlu:

    public class Oldlu {public void studyJavaCourse(){System.out.println("Oldlu 在学习 Java 的课程");}public void studyPythonCourse(){System.out.println("Oldlu 在学习 Python 的课程");}}

来调用一下:

    public static void main(String[] args) {Oldlu Oldlu = new Oldlu();Oldlu.studyJavaCourse();Oldlu.studyPythonCourse();}

2 依赖倒置应用

Oldlu 热爱学习,目前正在学习 Java 课程和 Python 课程。大家都知道,学习也是会上瘾的。随着学习兴趣的暴涨,现在 Oldlu 还想学习 AI 人工智能的课程。这个时候,业务扩展,我们的代码要从底层到高层(调用层)一次修改代码。在 Oldlu 类中增加 studyAICourse()的方法,在高层也要追加调用。
如此一来,系统发布以后,实际上是非常不稳定的,在修改代码的同时也会带来意想不到的风险。接下

来我们优化代码,创建一个课程的抽象 ICourse 接口:

    public interface ICourse {void study();}

然后写 JavaCourse 类:

    public class JavaCourse implements ICourse {@Overridepublic void study() {System.out.println("Oldlu 在学习 Java 课程");}}

再实现 PythonCourse 类:

    public class PythonCourse implements ICourse {@Overridepublic void study() {System.out.println("Oldlu 在学习 Python 课程");}}

修改 Oldlu 类:

    public class Oldlu {public void study(ICourse course){course.study();}}

来看调用:

    public static void main(String[] args) {Oldlu Oldlu = new Oldlu();Oldlu.study(new JavaCourse());Oldlu.study(new PythonCourse());}

我们这时候再看来代码,Oldlu 的兴趣无论怎么暴涨,对于新的课程,我只需要新建一个类,通过传参的方式告诉 Oldlu,而不需要修改底层代码。实际上这是一种大家非常熟悉的方式,叫依赖注入。注入的方式还有构造器方式和 setter 方式。我们来看构造器注入方式:

    public class Oldlu {private ICourse course;public Oldlu(ICourse course){this.course = course;}public void study(){course.study();}}

看调用代码:

    public static void main(String[] args) {Oldlu Oldlu = new Oldlu(new JavaCourse());Oldlu.study();}

根据构造器方式注入,在调用时,每次都要创建实例。那么,如果 Oldlu 是全局单例,则我们就只能
选择用 Setter 方式来注入,继续修改 Oldlu 类的代码:

    public class Oldlu {private ICourse course;public void setCourse(ICourse course) {this.course = course;}public void study(){course.study();}}

看调用代码:

    public static void main(String[] args) {Oldlu Oldlu = new Oldlu();Oldlu.setCourse(new JavaCourse());Oldlu.study();Oldlu.setCourse(new PythonCourse());Oldlu.study();}

现在我们再来看最终的类图
在这里插入图片描述
大家要切记:以抽象为基准比以细节为基准搭建起来的架构要稳定得多,因此大家在拿到需求之后,要面向接口编程,先顶层再细节来设计代码结构。

http://www.yayakq.cn/news/955877/

相关文章:

  • 地产项目网站设计做网站能注册账号的
  • 雄安网站建设制作营销型网站建设风格设定包括哪些方面
  • 怎么看网站的收录网站建设公司正规吗
  • 网站优化具体是怎么做的东莞建设网网上平台
  • 网站建设ppt模板wordpress怎么添加二级域名
  • 微商城网站建设咨询浙江设计公司排名
  • 百度竞价镇江江门17年seo优化技术软件
  • 织梦网站模板源码下载怎么查看一个网站的建设地区
  • 缔造自助建站传奇设计师身亡
  • 网站域名登记证明文件市场调研报告万能模板
  • 网站默认模板学生个人网页优秀模板
  • 织梦猫网站模板cosy WordPress
  • wordpress没了seo外链网站源码
  • 深圳建设交易中心网站制作网站首页
  • 免费域名注册网站哪个好门户网站开发方案文档
  • 网站推广的基本方法为常州到丹阳
  • 房地产网站大全网站开发项目有哪些
  • 新手php网站建设设计制作小车一教学反思
  • 网站后台账号密码破解南昌网站建设一般多少钱一年
  • 学校申请建设网站的原因怎样用手机做推广免费网站
  • 公司网站建设哪个好修改wordpress5.2登录图标
  • 如何建多语言网站建设网站需要花费什么费用
  • 网站模板 实验室重庆建设工程招标投标交易信息网
  • 政务网站建设的方向苏州seo网站推广
  • 一个彩票网站建设赤峰中国建设招标网站
  • 生活常识网站源码做推广的网站有哪些
  • 惠州网站搭建便宜做网站价格
  • 网站建设开什么名目肇庆seo外包公司
  • 有私人做网站的吗杭州钱塘区网站建设
  • sq网站推广菜单闭合 wordpress