3D编程模式:介绍设计原则
大家好~本文介绍6个设计原则的定义
系列文章详见:
3D编程模式:开篇
单一职责原则(SRP)
定义:
- 只有一个原因引起变化
- 一次只做一件事情
依赖倒置原则(DIP)
定义:
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
具体来说就是:
模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
接口或抽象类不依赖于实现类;
实现类依赖接口或抽象类。
接口隔离原则(ISP)
定义:
- 客户端不应该依赖它不需要的接口
- 类间的依赖关系应该建立在最小的接口上
也就是说,接口应该尽量细化,同时接口中的方法尽量少
迪米特法则(LoD)
也称为最少知识原则(LKP)
定义:
- 一个对象应该对其他对象有最少的了解
具体来说就是:
一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多public方法
它包括两个方面:
- 只与直接的朋友通信
- 朋友间也是有距离的
合成复用原则(CARP)
定义:
- 要尽量使用组合而不是继承
开闭原则(OCP)
定义:
- 对扩展开放,对修改关闭
其含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。
更多资料
应用原则的具体案例请见设计原则视频
3D编程模式:介绍设计原则的更多相关文章
- 《3D编程模式》写书-第1天记录
大家好,我现在开始写书了,书名为:<3D编程模式> 我会在本系列博文中记录写书的整个过程,感谢大家支持! 这里是所有的的写书记录: <3D编程模式>写书记录 为什么写书 去年我 ...
- 3D编程模式:依赖隔离模式
大家好~本文提出了"依赖隔离"模式 系列文章详见: 3D编程模式:开篇 本文相关代码在这里: 相关代码 目录 编辑器需要替换引擎 设计意图 定义 应用 扩展 最佳实践 更多资料推荐 ...
- java设计模式和设计原则
一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...
- Java 设计模式 和七大设计原则
创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 生成器模式(Builder pattern): 使 ...
- PHP设计原则
Laravel PHP设计模式 定义:将PHP设计成一个固化的模式 面向对象设计原则 内聚度:高内聚,表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关 耦合度: ...
- 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...
- MXNet设计笔记之:深度学习的编程模式比较
市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到 ...
- WPF 3D编程介绍
原文:WPF 3D编程介绍 上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书.今天要来讲一下在WPF如何开展3D编程. 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机 ...
- .NET 云原生架构师训练营(设计原则与模式)--学习笔记
在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发.和维护的成本 目录 几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析.设计.实 ...
- JavaScript设计原则与编程技巧
1 设计原则概述 <UNIX/LINUX设计哲学>设计准则 ① 小既是美. ② 每个程序只做一件事情. ③ 快速建立原型. ④ 舍弃高效率而取可移植性. ⑤ 避免强制性的图形化界面交互. ...
随机推荐
- 介绍一个我开源的项目:一键部署 VictoriaMetrics 群集
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我实在是非常喜欢这个强大的 metrics 监控组件 Vi ...
- LambdaQueryWrapper常用方法
/***附加条件构造器LambdaQueryWrapper常用方法 ---这几个肯定够用了*/wrapper.eq("实体类::查询字段", "条件值"); / ...
- [ABC246Ex] 01? Queries
Problem Statement You are given a string $S$ of length $N$ consisting of 0, 1, and ?. You are also g ...
- ssm整合-项目异常处理方案
项目异常分类: 项目异常处理方案: 需要自定义异常处理 然后在处理器中加入 package com.itheima.controller; import com.itheima.exception.B ...
- 笔记3:Tensorflow2.0实战之MNSIT数据集
最近Tensorflow相继推出了alpha和beta两个版本,这两个都属于tensorflow2.0版本:早听说新版做了很大的革新,今天就来用一下看看 这里还是使用MNSIT数据集进行测试 导入必要 ...
- 华企盾DSC无缝替换其它加密软件两种方法
有源码和大型图纸的使用第一种方案 第一种: 1.把DSCClient.exe和DSCService.exe添加到竞品的加密软件进程中,配置允许打开加密文件,加密类型不加密 2.安装DSC客户端后扫描加 ...
- mysql 定时 数据库备份并上传到另一台服务器上,上传结束并删除源文件
首先总共有两个脚本: #!/bin/bash:主要用于进行数据库备份.压缩.删除,单独运行命令是:bash XXX.sh #!/usr/bin/expect:主要用于进行数据备份文件的上传,单独运行 ...
- 神经网络优化篇:如何理解 dropout(Understanding Dropout)
理解 dropout Dropout可以随机删除网络中的神经单元,为什么可以通过正则化发挥如此大的作用呢? 直观上理解:不要依赖于任何一个特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传 ...
- MinIO的简单使用
MINIO介绍 什么是对象存储? 以阿里云OSS为例: 对象存储服务OSS(Object Storage Service)是一种海量.安全.低成本.高可靠的云存储服务,适合存放任意类型的文件.容量和处 ...
- Python——第四章:生成器(Generators)
生成器(generator): 生成器的本质就是迭代器 创建生成器的两种方案: 1. 生成器函数 2. 生成器表达式 生成器函数 生成器函数中有一个关键 ...