设计模式(二):设计原则
前任栽树后人乘凉,大佬们总结出了很多设计模式。这些设计模式会遵循一定的设计原则,一共7点;
1.开闭原则(OCP):对扩展开放、对修改关闭;即扩展性好,易于维护和升级。关键:抽象化;
1.1运用:工厂模式
1.2指导方针:找出不变的部分,把他们从变化的部分分离出来
2.里氏替换原则(LSP):任何基类可以出现的地方,子类一定可以出现。实现抽象化的具体步骤规范;
3.依赖倒转原则(Dependency Inversion Principle):针对接口编程,依赖于抽象而不依赖于具体类;
3.1概念:依赖倒转即让低层组件依赖高层组件;而且,不管高层或低层组件,“两者”都应该依赖于抽象。
3.2名词说明:
高层组件:是由其他低层组件定义其行为的类。例如:PizzaStore是个高层组件,因为它的行为是由Pizza定义的:PizzaStroe创建所有不同的披萨对象,准备、烘烤、切片、装盒
3.3运用:工厂模式最具代表性
3.4指导方针:(帮你在OO设计中违反依赖倒置原则)
* 变量不可以持有具体类的引用;->可以是抽象类的引用
* 不要让类派生自具体类;->如果派生自具体类,你就会依赖具体类。请派生自一个抽象(接口或抽象类)
* 不要覆盖基类中已是实现的方法。->如果覆盖基类中已实现的方法,那么你的基类就不是一个真正适合被继承的抽象
4.接口隔离原则(ISP):使用多个隔离的接口比使用单个接口好。目的:降低类之间的耦合度;
5.最少知道原则:又叫迪米特法则,一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立;
6.合成复用原则(Composite Reuse Priciple):尽量使用合成、聚合的方式,而不是继承
7.单一职责原则:一个类只有一个引起它变化的原因
设计模式(二):设计原则相关推荐
- 重温设计模式二 设计原则之依赖倒置原则
依赖倒置原则 1 定义 2 解释 1 定义 依赖倒置原则的定义 1 高层模块不依赖于底层模块 ,应该依赖抽象(接口) 2 抽象不应依赖于实现类 3 实现类应该依赖于抽象(接口) 一句话解释就是面向 接 ...
- Go设计模式(3)-设计原则
上一篇文章Go设计模式(2)-面向对象分析与设计里讲过,做设计最重要的是保留合适的扩展点.如何才能设计出合适的扩展点呢? 这篇文章会讲解一下经典的设计原则.这些设计原则大家可能都听过,但可能没有想过为 ...
- 设计模式-六大设计原则(附加实际开发建议以及计算器例子)
使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.设计模式使代码编制真正工程化,是软件工程的基石脉络,如同大厦的结构一样. 文章结构: 1.单一职责原则(SRP): 2.里氏替换原 ...
- 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...
对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...
- 设计模式 - 七大设计原则(一)
设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...
- 【设计模式】设计原则
[设计模式]设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 1 开闭原 ...
- 设计模式之设计原则与思想:设计原则(二)
文章目录 KISS 原则 YAGNI 原则 DRY 原则 代码复用性(Code Reusability) 何为"高内聚.松耦合"? 迪米特法则(LOD) 为什么要分 MVC 三层开 ...
- 设计模式与设计原则 —— 一句话
一.设计原则 二.设计模式 范围\目的 创建型模式 结构型模式 行为型模式 类模式 工厂方法 (类)适配器 模板方法.解释器 对象模式 单例 原型 抽象工厂 建造者 代理 (对象)适配器 桥接 装饰 ...
- JAVA关于设计模式六大设计原则
设计模式 前言 一.单一职责原则 1.定义 2. 问题由来 3.单一职责优点: 二.里式替换原则 1.定义: 2.含义: 3.优缺点: 4.注意事项 三.依赖倒置原则 1.定义 2.作用 3.实现方法 ...
- UML类图、JAVA DesignMode 设计模式、设计原则
全文2.6W余字,读完需要20分钟,介绍23种设计模式,每个模式都有案例与真实使用场景,能够帮助初学者快速了解设计模式,建立起对代码中设计模式的初步理解,要明确:设计模式只是帮助我们更好的设计代码架构 ...
最新文章
- 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
- 【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...
- asp.net源碼坊論壇上線
- 《浪潮之巅》 读后感
- 虚函数和作用域(C++ primer 第五版)P550
- 使用说明 vector_Paddlepaddle学习|Ubuntu环境使用 Mahout 进行朴素贝叶斯模型的训练和测试...
- 闲来没事写个记事本玩玩!!!
- Array.Sort方法
- 通过样式class也是可以控制超链接是否弹窗
- 设计模式(十三): 命令模式
- Tensorflow训练神经网络
- leetcode讲解--513. Find Bottom Left Tree Value
- php原生判断,JavaScript
- 2023年天津仁爱学院专升本考试考务费网上缴费的通知
- 盛大文学云中书城zz
- Linux常用的终端操作命令
- Oracle索引与where
- ChatGPT中文网 - ChatGPT国内网页版在线使用
- 解决无线网卡打不开的问题(by quqi99)
- (知乎)我想问一下PHP的学习路线图