大话设计模式之七大原则

说到设计模式, 其实就是对软件设计过程中存在的普遍问题,所提出的公共的解决方案,能够很好的解决一些常见的问题,其最终目的就是:高内聚低耦合;

使用这七大原则和三大模式来尽可能的提高代码的重用性,可读性和可扩展性。今天我们就先来介绍下对象的七种设计原则。

总述

七种面向对象设计原则
设计原则定义
单一职责原则一个类只负责一个功能领域中的相应职责
开闭原则软件实体应对扩展开放,而对修改关闭
里式替换原则所有引用基类对象的地方能够透明地使用其子类的对象
迪米特法则一个软件实体应当尽可能的少与其他实体发生相互作用
接口隔离原则使用多个专门的接口,而不使用单一的总接口
依赖倒转原则抽象不应该依赖于细节,细节应该依赖于对象
合成复用原则尽量使用对象组合,而不是继承来达到复用的目的

原则简述

单一职责原则
  • 定义:

一个类只有一个引起它变化的原因。

  • 理解:

对功能进行分类,代码进行解耦,一个类只管一件事

  • 举例:

就比如一个网络请求框架大体分为:请求类,缓存类,配置类,不能把这3个混在一起,必须分为3个类去实现不同的功能。

2.开闭原则
  • 定义:

一个实体(类、函数、模块等)应该对外扩展开放,对内修改关闭

  • 理解:

每次发生变化时,要通过新增代码来增强现有类型的行为,而不是修改原有代码。

  • 举例:

解决在迭代过程中加新功能导致对原来框架产生影响。

3. 里氏替换原则
  • 定义:

继承必须确保超类所拥有的性质在子类中仍然成立。

  • 理解:

在继承类时,除了扩展一些新的功能之外,尽量不要删除或者修改对父类方法的引用,也尽量不要重载父类的方法。

  • 举例:

你看啊,就比如Object有个方法,叫equals,如果不遵守里氏代替原则,它的子类重载了equals这个方法,并且返回了个null,这个子类的下一个继承者也会返回null,那么,在不同开发人员开发时,可能考虑不到这个问题,那么就可能导致程序崩溃。

4.迪米特法则
  • 定义:

一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。

  • 理解:

一个对象应该对其他对象有最少的了解;一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现、如何复杂都与调用者或者依赖者没关系,调用者或者依赖者只需要知道他需要的方法即可,其他的一概不关心。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

  • 举例:

一般在使用框架的时候,框架的开发者会抽出一个类供外部调用,而这个主要的类像是一个中介一样去调用框架里面的其他类,恰恰框架里面其他类一般都是不可访问(调用)的,这个框架就遵守了迪米特原则,其他开发人员只关心调用的方法,并不需要关心功能具体如何实现。

5.接口隔离原则
  • 定义:

使用多个专门功能的接口,而不是使用单一的总接口

  • 理解:

在定义接口方法时应该合理化,尽量追求简单最小,避免接口臃肿

  • 举例:

在实际开发中,往往为了节省时间,可能会将多个功能的方法抽成一个接口,其实这设计理念不正确的,这样会使接口处于臃肿的状态,这时就需要合理的拆分接口中的方法,另外抽取成一个独立的接口,避免原有的接口臃肿导致代码理解困难。

6.依赖倒置原则
  • 定义:

细节应该依赖于抽象,而抽象不应该依赖于细节

  • 理解:

高层模块不依赖低层次模块的细节,不依赖具体的类,而是依赖于接口

  • 举例:

比如说我们写一个网络框架,为了满足不同开发者的需求,即能使用高效的OkHttp框架,也可以使用原生的API。那么是如何进行切换的呢,这个时候需要面向接口编程思想了,把一些网络请求的方法封装成一个接口,然后分别创建OkHttp和原生API的接口实现类,当然也可以扩展其他网络框架的应用。

7.合成复用原则
  • 定义:

尽量使用对象组合,而不是继承来达到复用的目的。

  • 理解:

它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

  • 举例:

相当于我们开发软件,一个模块的构造,就像搭积木一样,通过组合的形式,完成整体的构建;现在声明式UI框架,对于这种思想比较贯彻。

最后

  • 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
  • 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值