专栏首页魏晓蕾的专栏设计模式所遵循的基本原则

设计模式所遵循的基本原则

1、单一职责原则(Single Responsibility Principle,SRP)

(1)定义 单一职责是编写程序的一个准则,是一个不可逾越的红线。单一职责原则要求设计一个类的时候要么只体现一个功能,要么有多个功能时彼此独立,要么多个功能彼此之间的依赖是单向的。 (2)好处 单一职责原则确保每一个功能都是最小独立单元,可以根据业务进行灵活的组装。而这种组装的方式将极大地降低项目中的耦合度,在未来业务发生变更时,会极大地降低维护成本,带来巨大的好处。 (3)违反单一职责原则原因 简单来说,就是职责的扩散,也就是需求发生变化导致的。国内项目的开发采用迭代升级的方式,随着时间增长用户提供的需求会逐渐增加,导致类的功能会逐渐细化,而这种细化分为两个方向:横向细化,纵向细化。 横向细化:指的是在原有业务流程不变的情况下,产生一个全新的业务流程线。 纵向细化:指的是在不增加新业务流程线的情况下,对原有业务流程中相关环节进行修改。 (4)总结 单一职责原则并不是一个孤立的面向对象设计原则,它是面向对象设计五个基本原则(SOLID)之一,目的是降低项目耦合度,增加项目扩展性。 在实际开发中,遇到违反单一职责原则需要进行重构的时候,可以使用代理模式(Proxy)与外观模式(Facade)来进行解决。 注意点: 单一职责原则最难的就是进行职责划分。这个需要根据具体需求进行分析。 单一职责原则提出标准:用职责和变化原因来衡量接口或类设计的是否优良,但是职责和变化原因都是不可度量的,因项目和环境而异。 接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

2、开闭原则(Open Closed Principle)

(1)定义 在需求发生变更时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。简单说,就是关闭代码修改的通道,打开代码扩展的通道。 (2)开闭原则使用场景

  1. 将需求中未来可能出现变化的方法做成抽象方法,放到一个抽象类或接口中,当需求发生变更时,只需要生成一个新的实现类即可,可以减少开发的成本,降低项目的耦合度。
  2. 参数类型控制。利用多态,将方法中的参数设置为父类型,当需求发生变更时,传入不同的子类对象。
  3. 元数据(metadata)控件模块的行为控制。元数据就是配置信息,如数据库的相关连接信息,将需要变化的部分放入配置文件。
  4. 制定项目章程。在Spring框架的使用过程中,Spring项目中使用注解或配置文件的方式进行开发,不能混用。

3、接口隔离原则(Interface Segregation Principle)

(1)定义 接口隔离原则指的是接口中的方法必须都是实现类所需要的方法。 (2)优点 1)降低接口实现类开发难度 2)降低项目耦合度,减轻业务变更时的维护难度 (3)接口隔离原则的实现方案一:接口拆分方案 接口拆分方案是一种为了满足接口隔离设计原则而产生的重构方案,要求将原有接口中的方法分割为若干个独立的单元,每一个单元就是一个接口。 接口拆分方案的优点: 1)降低了接口实现类的开发难度。 2)增加了接口使用的灵活性。 接口拆分方案的缺点: 接口拆分方案只适用于原有接口中方法较少的情况,如果原有接口中的方法过多,将会导致“接口爆炸”,变相地增加了接口实现类的开发的负担。 (4)接口隔离原则的实现方案二:适配器模式

4、里氏替换原则(Liskov Substitution Principle)

(1)背景 里氏替换原则告诉我们该如何使用继承。 继承的优点: 1)增加了代码的复用性。 2)增加了功能扩充的灵活性。 继承使用不当产生的问题: 1)增加耦合度,导致父类变化时子类需要修改。 2)增加侵入性,导致父类的方法和属性侵入到子类的方法。 (2)定义 子类可以扩展父类的功能,但不能改变父类原有的功能。 使用原则: 1)子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。 2)子类中可以增加自己特有的方法。 3)当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。 4)当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

5、依赖倒置原则(Dependence Inversion Principle)

(1)定义 依赖:类A在实现某种功能时,必须依靠类B的帮助,比如Service类与Dao类之间的关系。 依赖传递:1)通过构造方法实现依赖;2)通过set方法实现依赖;3)通过方法中的参数实现依赖。 倒置:取消依赖的约束关系。 依赖倒置:即为面向接口编程,两个类之间的依赖应该通过接口进行隔离,这样可以有效地降低耦合度,降低未来业务变更时的维护成本。 (2)目的与优势 1)依赖倒置原则的目的:依赖类与被依赖类之间通过接口相联系,以降低依赖类和被依赖类之间的耦合度。 2)依赖倒置原则的好处: a)有利于模块间的并行开发 b)降低模块间的耦合度 (3)依赖倒置原则的使用方式 1)低层模块尽量抽取成抽象类或接口,或者既有抽象类又有接口。 2)变量的声明类型尽量是抽象类或接口。 3)使用继承时遵循里氏替换原则。 (4)Spring框架中的IOC(控制翻转) IOC = 依赖倒置原则 + 反射机制 + 工厂设计模式

6、避免重复性开发原则(Don’t Repeat Yourself)

(1)定义 该原则是面向对象思想中的一个基本设计原则,建议开发人员不要重复性地进行代码开发,要多多使用封装,增加代码的复用性以及降低耦合度。 (2)重复性代码开发的隐患 1)增加重复性开发的工作量。 2)同一个业务在项目中会存在多个解决方案,导致业务崩塌。 3)增加维护困难。

7、将复杂问题拆分成简单问题原则(Keep It Stupid Simple)

(1)定义 将一个复杂的问题尽可能拆分成若干个简单的小单元进行实现,这样可以降低问题实现的难度,降低耦合度,同时也会增加代码的复用性。 (2)优点 以很简洁的代码来解决很复杂的问题。 代码会更加灵活,易于扩展、修改或重构,并且能够适应需求的变化。

8、迪米特原则(Law of Demeter)

(1)定义 迪米特原则又叫最少知道原则,就是说一个类对于其他类尽可能少的依赖。如果必须依赖,是通过一个中间类来建立关联。 (2)作用 迪米特原则用来降低类之间的耦合度,便于项目的扩展和维护。 (3)什么是朋友关系 两个对象之间存在耦合,他们就是朋友关系。 1)类B作为类A的成员变量,类B与类A之间形成了朋友关系。 2)类B作为类A方法的参数,类B与类A之间形成了朋友关系。 3)类B作为类A方法的返回值,类B与类A之间形成了朋友关系。 (4)朋友之间如何保持距离 如果类A与类B之间形成朋友关系,类B应该尽可能对类A隐藏方法实现细节,即尽可能减少public方法的数量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【机器学习 基本概念】高斯分布

    今天,我要介绍我们早就知道的一种分布,它叫做高斯分布。高斯分布在概率论中算是比较核心的一种分布了,而在机器学习中,高斯分布也随处可见,比如单高斯模...

    魏晓蕾
  • Linux 背景知识

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • 虚拟机中CentOS6.4系统详细安装步骤

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • SOLID原则(OOD&OOP)

    SOLID原则是面向对象编程和面向对象设计的头五大原则。学习及应用这五大原则可以构建一个易于维护和扩展的应用程序,我们一起看看到底是那五大原则。

    小世界的野孩子
  • JS 桥接模式

    桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化。 其实就是函数的封装,比如要对某个DOM元素添加color和backgroundC...

    前端下午茶
  • Duang~ Android堆栈慘遭毁容?精神哥揭露毁容真相!

    最近精神哥接到多个小伙伴的投诉,说无法看懂Bugly崩溃克星页面上显示的堆栈信息!精神哥赶紧把正研究的Top Crash崩溃和心爱的鸡爪放下,开始着手跟进。经分...

    腾讯Bugly
  • 千万不要让别人评判你的创业

    孟永辉
  • 学习算法的七重境界,我在撸串境界,你在哪一重?

    知识掌握的第一重境界,我管它叫“撸串境界”。什么意思?就是,对于这个知识,你只有在撸串的时候,才能“无障碍”地提起。比如:

    五分钟学算法
  • 微信小程序_01程序结构

    注意 AppID 目前个人无法申请,使用企业账号可以申请,我们就选择"无AppID"

    酷走天涯
  • Android后台杀死系列之三:LowMemoryKiller原理(4.3-6.0)

    本篇是Android后台杀死系列的第三篇,前面两篇已经对后台杀死注意事项,杀死恢复机制做了分析,本篇主要讲解的是Android后台杀死原理。相对于后台杀死恢复,...

    看书的小蜗牛

扫码关注云+社区

领取腾讯云代金券