原则1:DRY(Don't repeat yourself)

即不要写重复的代码,而是用“abstraction”类来抽象公有的东西。如果你需要多次用到一个硬编码值,那么可以设为公共常量;如果你要在两个以上的地方使用一个代码块,那么可以将它设为一个独立的方法。SOLID设计原则的优点是易于维护,但要注意,不要滥用,duplicate 不是针对代码,而是针对功能。这意味着,即使用公共代码来验证OrderID和SSN,二者也不会是相同的。使用公共代码来实现两个不同的功能,其实就是近似地把这两个功能永远捆绑到了一起,如果OrderID改变了其格式,SSN验证代码也会中断。因此要慎用这种组合,不要随意捆绑类似但不相关的功能。

原则2:封装变化

在软件领域中唯一不变的就是“Change”,因此封装你认为或猜测未来将发生变化的代码。OOPS设计模式的优点在于易于测试和维护封装的代码。如果你使用Java编码,可以默认私有化变量和方法,并逐步增加访问权限,比如从private到protected和not public。有几种Java设计模式也使用封装,比如Factory设计模式是封装“对象创建”,其灵活性使得之后引进新代码不会对现有的代码造成影响。

原则3:开闭原则

即对扩展开放,对修改关闭。这是另一种非常棒的设计原则,可以防止其他人更改已经测试好的代码。理论上,可以在不修改原有的模块的基础上,扩展功能。这也是开闭原则的宗旨。

原则4:单一职责原则

类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

原则5:依赖注入或倒置原则

这个设计原则的亮点在于任何被DI框架注入的类很容易用mock对象进行测试和维护,因为对象创建代码集中在框架中,客户端代码也不混乱。有很多方式可以实现依赖倒置,比如像AspectJ等的AOP(Aspect Oriented programming)框架使用的字节码技术,或Spring框架使用的代理等。

原则6:优先利用组合而非继承

如果可能的话,优先利用组合而不是继承。一些人可能会质疑,但我发现,组合比继承灵活得多。组合允许在运行期间通过设置类的属性来改变类的行为,也可以通过使用接口来组合一个类,它提供了更高的灵活性,并可以随时实现。《Effective Java》也推荐此原则。

原则7:里氏代换原则(LSP)

根据该原则,子类必须能够替换掉它们的基类,也就是说使用基类的方法或函数能够顺利地引用子类对象。LSP原则与单一职责原则和接口分离原则密切相关,如果一个类比子类具备更多功能,很有可能某些功能会失效,这就违反了LSP原则。为了遵循该设计原则,派生类或子类必须增强功能。

原则8:接口分离原则

采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。设计接口很棘手,因为一旦释放接口,你就无法在不中断执行的情况下改变它。在Java中,该原则的另一个优势在于,在任何类使用接口之前,接口不利于实现所有的方法,所以单一的功能意味着更少的实现方法。

原则9:针对接口编程,而不是针对实现编程

该原则可以使代码更加灵活,以便可以在任何接口实现中使用。因此,在Java中最好使用变量接口类型、方法返回类型、方法参数类型等。《Effective Java》 和《head first design pattern》书中也有提到。

原则10:委托原则

该原则最典型的例子是Java中的equals() 和 hashCode() 方法。为了平等地比较两个对象,我们用类本身而不是客户端类来做比较。这个设计原则的好处是没有重复的代码,而且很容易对其进行修改。

设计模式中必须知道的一些原则相关推荐

  1. 设计模式中遵循的原则:单一职责、开发-封闭、依赖倒转

    设计模式中遵循的原则:单一职责.开放-封闭.依赖倒转 单一职责原则 一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这 ...

  2. 设计模式中的开闭原则

    Table of Contents 1 设计模式中的开闭原则 1.1 基本原则 2 模式中的开-闭原则 2.1 策略模式 2.2 简单工厂 2.3 工厂方法 2.4 抽象工厂 2.5 建造者模式 2. ...

  3. Java设计模式中的六大设计原则

    最近一直在看有关设计模式的博客和文章,发现自己对于设计模式的认识和理解还是有点浅显,于是想动手写博客巩固一下. 在开始阐述设计模式之前,首先介绍一下设计模式中的六大原则:      总原则-开闭原则 ...

  4. 里氏替换原则——举例说明Java设计模式中的里氏替换原则

    里氏替换原则--举例说明Java设计模式中的里氏替换原则 1. 前言 官方定义: 2. 举例说明 2.1 例子介绍 2.2 反例 2.2.1 类图说明 2.2.2 代码说明 2.2.3 测试 2.2. ...

  5. 设计模式中的七大原则(代码 + 图解)

    文中涉及的代码:链接:提取码:tqjq 文章目录 设计模式 1. 目的 2. 分类 3. 原则 3.1单一职责原则 3.2 接口隔离原则 3.3 依赖倒转原则 3.4 里氏替换原则 3.5 开闭原则 ...

  6. 里氏代换原则在Java以及设计模式中的体现

    ​里氏代换原则在Java中的体现 前面说了里氏代换原则,那么现在说一下里氏代换原则在Java中的使用. 里氏代换原则要求父类类型可以使用的,那么子类一定可以适用.因此子类必须具有基类的全部接口,并且可 ...

  7. 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则

    依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...

  8. 接口隔离原则——举例说明Java设计模式中的接口隔离原则

    举例说明Java设计模式中的接口隔离原则 一.举例说明 1.反例 (1)类图说明 (2)代码说明 (3)测试 (4)分析缺点(总结) 2.正例 (1)类图说明 (2)代码说明 (3)测试 (4)方案评 ...

  9. [设计模式]设计模式之禅关于接口隔离原则

    在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ● 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的事物的描述 ...

最新文章

  1. mybatis中使用mysql的模糊查询字符串拼接(like)
  2. mysql window怎么安装补丁_window下mysql安装步骤
  3. 方立勋_30天掌握JavaWeb_自定义标签
  4. 【kafka】kafka jmx docker 容器下 跨容器连接 没有到主机的路由 host unreachable
  5. Spark Streaming自定义接收器
  6. mysql表的relationship_sqlalchemy 配置多连接读写库后的relationship设置
  7. 业界总结 | 如何改进双塔模型,才能更好的提升你的算法效果?
  8. SpringBoot06 统一响应格式
  9. OCR识别身份证及营业执照图片(Java版)
  10. Label propagation
  11. 一天干掉一只Monkey计划(三)——延迟渲染,及材质ID
  12. 办公室电脑如何共享计算机,办公室电脑如何互相共享文件?
  13. 北京理工大学计算机学硕考研科目,2021北京理工大学计算机考研科目
  14. 初学者儿童适合什么尺寸吉他?聪明的家长都这样选!
  15. 易语言删除全部空白字符
  16. Vue和ElementUI第二天
  17. 免安装版本的+mysql_mysql免安装版本
  18. 在iPhone、iPad或Mac上怎样重命名蓝牙设备?
  19. idea使用lombok的时候无法找到log,编译时无法找到log
  20. 几款流行监控系统简介

热门文章

  1. python序列类型-Python内置序列类型之集合类型详解
  2. python基础代码-python基础,python基础代码大全
  3. python3.6.5安装-Ubuntu16.04安装python3.6.5详细步骤
  4. python工作-python工作中总结
  5. 零基础学python看什么书-零基础学python推荐几本python学习的书籍
  6. 在线python编程编译器-python在线编译器的简单原理及简单实现代码
  7. python入门作业编程题-【python基础语法】第10天作业练习题
  8. 函数式编程语言python-用Python进行基础的函数式编程的教程
  9. 王石:我每天都强迫自己做的一件事
  10. Activity的用法(三):开启网页 (没有弹出浏览器,不清楚是什么原因)