七大设计原则:

七大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则

Java 有三大特性:封装、继承、多态。

而这七大设计原则,更像是对三大特性的一种体现。

七大原则并不是分别独立的原则,他们之间是相互有联系的,甚至可以看做是一体的。

有时候你为了符合某种原则会无意之间破坏另一个原则

有时候你为了符合某种原则还会发现这也符合另外几种原则

开闭原则

对(类、方法)扩展开放,对修改关闭。

开闭原则是七大设计原则中最基础的一个。

我觉得开闭很好理解,但是对 扩展修改 这两个动作的定义就看自己的经验了。

在开发的过程汇总,对经常需要变动(修改)的地方,通过扩展(抽象)的方式来达到目的。可以使用继承、接口、抽象类这些方式。

依赖倒置原则

依赖倒置原则更加体验在代码结构层面

高层模块不应该依赖低层模块,都应该依赖其抽象。该原则规定了高层模块应如何调用底层模块。

开车,就把车抽象(可能开不同的车)。

开车这个类只需要依赖一个车的抽象类,而不是去依赖一堆各式各样的车。这个地方编码的时候也符合了开闭原则,车是经常变化的,那就把车抽象化。

吃饭,就把饭抽象(可能每次吃的饭也不同)

单一职责原则

一个类,接口,方法 只负责一项职责

这样的涉设计可以提高代码的可读性,降低代类的复杂度,最主要的是降低了每次变更引起的风险。

主要是避免修改方法之后,对多处调用的地方产生影响。

接口隔离原则

高类聚,低耦合

主要体现在接口规划方面,其实就是更加细化接口,实现的时候只实现自己需要的接口。

万事万物都有一个度,具体细化到什么程度,这个就看实际情况。其实很多时候我们不一定需要特别细化。

比如:动物的行走方式,每个动物都不一样,有的是用翅膀飞,有的是用腿跑,还有的是在水里游。

虽然每个方式都不一样,但是他们又都是同一种行为(行动方式)。

在设计接口时,自己要知道是不是需要根据不同的行为类型分别定义不同的行为接口。

迪米特原则

最少知道原则,只和朋友交流,不和陌生人说话

和自己没有直接关联的类,不要引用。

迪米特原则更加像是描述了同一层模块之间的相互调用规则。

里氏替换原则

子类对象无论何时都能替换父类对象

子类可以扩展父类的功能,但不能改变父类原有的功能。

里氏替换原则是描述了父子类之间继承的规则。

组合复用原则

尽量使用对象组合、聚合,而不是继承关系达到软件复用的目的

继承、关联、聚合、组合的区别:

1、继承

不用多说了,A继承B,那么A就是B,但反过来B不一定是A。所以继承是is-a的关系,是一种纵向的关系。

2、关联

关联是两个类之间有联系,这种联系是很微弱的或者说是临时的,比如人过河要坐船,人和船就产生了联系,但是这种联系是临时的,人过了河就跟船没关系了。表现在代码层面就是A关联B,那么B以A的成员变量的形式存在在类A中。

3、聚合

聚合是关联关系的一种,也是两个事物要产生关系,但是这个关系的强度要大于关联关系,不是微弱或者临时的,是比较长久的关联,比如员工和公司的关系。但是这种互相关联的两个对象彼此又是独立的,各有各的生命周期,如果拆散这种关系那么各自也能玩儿的转。就好比员工和公司是一种长期的关系,但是公司和员工是彼此独立的,各有各的生命周期,公司没有张三这个员工也能玩儿的转,反过来张三不在这个公司去别的公司也玩儿的转。这种关系体现的是has-a的关系,代码表现和关联关系一样。

4、组合

组合是比聚合更紧密的关联关系,是一种强关联关系,具有组合关系的两个事物谁都不能缺少谁,如果断开这种关系各自都玩儿不转了,比如人和大脑的关系。这中关系是contains-a的关系,代码表现和关联关系一样。

所以从代码层面上看关联、聚合和组合表现形式都是一样的,得从语义上来区分,他们三个都是横向的关系。

那什么时候用继承又什么时候用组合呢?如果你要对现实世界建模,比如要描述狗类和动物的时候就要用继承,因为这些在概念上具有层次关系;如果你想表述你个实体要借助另一个实体来完成某项任务或者想表达has-a或者contains-a的时候就要用组合;如果只是在实现层面想达到代码复用的目的,那么优先使用组合。

设计模式之七大设计原则详解相关推荐

  1. Java七大设计原则详解与运用

    开心一笑 [婚礼上,气氛正高着,主持人问新郎:"你会不会爱新娘一辈子?新郎兴高采烈的喊:"会".主持人:"你会不会在新娘容颜憔悴,疾病缠身的时候离开她? 猴急的 ...

  2. 面向对象设计的七大设计原则详解

    面向对象的七大设计原则 文章目录 面向对象的七大设计原则 简述 七大原则之间的关系 一.开闭原则(The Open-Closed Principle ,OCP) 概念理解 系统设计需要遵循开闭原则的原 ...

  3. 【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★

    文章目录 一.七大设计原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特原则 6.里氏替换原则 7.合成复用原则 二.创建型模式 0.简单工厂模式 ( 不属于 GOF ...

  4. “设计模式之禅”——六大设计原则详解解读

    目录 一.单一职责原则 二.里氏替换原则 三.依赖倒转原则 四.接口隔离原则 五.迪米特法则 六.开闭原则 一.单一职责原则 单一职责原则的英文名称是:Single Responsibility Pr ...

  5. 接口隔离原则_设计模式之七大设计原则(上)

    这是雷总20多年前写的汇编程序,像诗一样优雅 而中国诗词讲究平仄.押韵.对仗等一系列的规则原则, 那么想要写出像诗一样优雅的程序你不得不知的 -- 设计模式之七大原则: 1.开闭原则:对修改关闭,对扩 ...

  6. Java设计模式--------面向对象七大设计原则

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.单一职责原则 二.开闭原则 三.接口隔离原则 什么是接口隔离原则 接口隔离原则分析 四.里氏替换原则 继承 为什么 ...

  7. 设计原则:面向对象设计原则详解

    我们在应用程序开发中,一般要求尽量两做到可维护性和可复用性.         应用程序的复用可以提高应用程序的开发效率和质量,节约开发成本,恰当的复用还可以改善系统的可维护性.而在面向对象的设计里面, ...

  8. UML图及软件设计原则详解

    1.UML图 统一建模语言(Unified Modeling Language,UML)是用设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML从目标系统 ...

  9. C++面向对象设计原则详解

    概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...

  10. 设计模式的七大设计原则:其七:合成复用原则

    合成复用原则(Composite Reuse Principle) 基本介绍: 原则是尽量使用合成/聚合的方式,而不是使用继承. 设计原则核心思想: 1.找出应用中可能需要变化之处,把它们独立出来,不 ...

最新文章

  1. 人工智能论坛_诚邀共享 | 2020人工智能医疗产业前瞻论坛
  2. oracle 工作中遇到的函数
  3. jQuery浏览器版本判断
  4. 开始学习3年前的东西——MCMS
  5. java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
  6. android下升级软件介绍
  7. SpringBoot创建简单的hello world
  8. sdk是什么_海外APP和游戏中最常用SDK排名(截止5月17, 2020)
  9. 剑指offer(C++)-JZ55:二叉树的深度(数据结构-树)
  10. 怎么把我的文档C盘的路径改到E盘啊
  11. SHELL(bash)脚本编程四:其他扩展
  12. 你不了解的事,十三天精通爬虫分布式学习路线,赠教程
  13. 3.FXBLUE跟单原理
  14. Vue实现百度离线地图(v2.0)
  15. MAVEN下载修改settings.xml
  16. 苹果手机无法连接wifi_苹果11pro连接wifi信号差
  17. java 杨辉三角_Java语言杨辉三角
  18. easyUI双击事件,完整总结
  19. 清华大学公开课线性代数2——第12讲:复数与复矩阵
  20. python查找元素在列表中位置

热门文章

  1. 人力资源常用理论和法则
  2. Android音频剪辑裁剪自定义view
  3. 怎样快速提高计算机能力,如何提高算术能力?不借助计算机、笔、纸等工具,怎么能快速心算出多位数计算结果?如:489x85 如:128965-98542有什么口决及速算的方法的详细步骤?...
  4. H3C网络流量镜像配置
  5. 学号在java是什么意思_在JAVA程序中增加姓名学号
  6. linux 效果器软件下载,盘点丨15款免费又好用的音乐制作软件
  7. 最全的常用正则表达式--包含校验数字、字符、一些特殊的需求等等
  8. 定时关机win10_巧用任务计划程序定时关机
  9. mac 备份文件 太大 时间机器_Mac苹果电脑如何从时间机器恢复备份?
  10. 金融科技之能量守恒定律