设计模式总结-笔记

news2024/11/16 13:46:23

一个目标:管理变化,提供复用!

两种手段:分解vs.抽象

八大原则:

依赖倒置原则(DIP)

开放封闭原则(OCP)

单一职责原则(SRP)

Liskov替换原则(LSP)

接口隔离原则(ISP)

对象组合优于继承

封装变化点

面向对象编程

重构技法:

静态->动态

早绑定->晚绑定

继承->组合

编译时依赖->运行时依赖

紧耦合->松耦合

从封装变化角度对模式分类:

 

 

什么时候不用模式:

代码可读性很差时

需求理解还很肤浅

变化没有显现时

不是系统的关键依赖点

项目没有复用价值时

项目将要发布时

经验之谈:

不要为模式而模式

关注抽象类&接口

理清变化点和稳定点

审视依赖关系

要有Framework和Application的区隔思维

良好的设计时演化的结果

设计模式成长之路:

“手中无剑,心中无剑”:见模式而不知

“手中有剑,心中无剑”:可以识别模式,作为应用开发人员使用模式

“手中有剑,心中有剑”:作为框架开发人员为应用设计某些模式

“手中无剑,心中有剑”:忘掉模式,只有原则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt一坑】qt编译出现“常量中有换行符”

在qt编译过程中出现“常量中有换行符”,原因有以下几点(qt版本5.14.2): 1.中文编码格式问题,将UTF-8编码格式改成 UTF-8 BOM。 或者使用QtCreator 进行如下设置(找到Qt的左边列表里的项目,下的…

git -1

1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…

Vue3鼠标拖拽生成区域块并选中元素

Vue3鼠标拖拽生成区域块并选中元素&#xff0c;选中的元素则背景高亮(或者其它逻辑)。 <script setup> import { ref } from vue// 区域ref const regionRef ref(null)// 内容ref const itemRefs ref(null)// 是否开启绘画区域 const enable ref(false)// 鼠标开始位置…

第十二章 pytorch中使用tensorboard进行可视化(工具)

PyTorch 从 1.2.0 版本开始&#xff0c;正式自带内置的 Tensorboard 支持了&#xff0c;我们可以不再依赖第三方工具来进行可视化。 tensorboard官方教程地址&#xff1a;https://github.com/tensorflow/tensorboard/blob/master/README.md 1、tensorboard 下载 step 1 此次…

时间复杂度和运算

时间复杂度 在算法和数据结构中&#xff0c;有许多时间复杂度比 O(1) 更差的情况。以下是一些常见的时间复杂度&#xff0c;按照从最优到最差的顺序排列&#xff1a; O(1)&#xff1a; 常数时间复杂度&#xff0c;操作的运行时间与输入规模无关&#xff0c;是最理想的情况。 O…

源码安装Apache

一、下载Apache,源码安装Apache #下载 [rootlocalhost opt]# wget -c https://mirrors.aliyun.com/apache/httpd/httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58.tar.gz [rootlocalhost opt]# tar -xf httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58…

移远通信推出六款新型天线,为物联网客户带来更丰富的产品选择

近日&#xff0c;移远通信重磅推出六款新型天线&#xff0c;覆盖5G、非地面网络&#xff08;NTN&#xff09;等多种新技术&#xff0c;将为物联网终端等产品带来全新功能和更强大的连接性能。 移远通信COO张栋表示&#xff1a;“当前&#xff0c;物联网应用除了需要高性能的天线…

【Docker】从零开始:4.为什么Docker会比VM虚拟机快

【Docker】从零开始&#xff1a;4.为什么Docker会比VM虚拟机快 docker有着比虚拟机更少的抽象层docker利用的是宿主机的内核,而不需要加载操作系统OS内核 docker有着比虚拟机更少的抽象层 由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接…

【C++】C++11(1)

文章目录 一、C11简介二、统一的列表初始化1.&#xff5b;&#xff5d;初始化2.std::initializer_list 三、声明1.auto2.decltype3.nullptr 四、STL中一些变化五、右值引用和移动语义1.左值引用和右值引用2.左值引用与右值引用比较3.右值引用使用场景和意义4.右值引用引用左值及…

如何化解从数据到数据资源入表的难题

继数据成为生产要素后&#xff0c;各种跟数据相关的概念就出来了&#xff0c;首先我们要弄明白有关数据的几个高频词汇。数据&#xff1a;指“原始数据”&#xff0c;即记录事实的结果&#xff0c;用来描述事实的未经加工的素材。数据资源&#xff1a;指加工后具有经济价值的数…

使用Pytorch实现linear_regression

使用Pytorch实现线性回归 # import necessary packages import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt# Set necessary Hyper-parameters. input_size 1 output_size 1 num_epochs 60 learning_rate 0.001# Define a Toy datas…

Unity团结引擎使用总结

团结引擎创世版以 Unity 2022 LTS 为研发基础&#xff0c;与 Unity 2022 LTS 兼容、UI 也基本保持一致&#xff0c;使 Unity 开发者可以无缝转换到团结引擎。融入了团结引擎独有功能和优化&#xff0c;未来会加入更多为中国开发者量身定制的功能和优化。 目前正在内测&#xf…

函数模板(成长版)

与普通函数区别&#xff1a;1.多了个template<class T>;2.某些确定类型变不确定类型T 一&#xff1a;引子&#xff1a; #include<iostream> using namespace std; template<typename T> T Max(T a, T b) {return a > b ? a : b; } int main() {int x, …

深信服AC跨三层取mac,绑定ip/mac

拓扑图 目录 拓扑图 1.交换机配置团体名和版本号 2.配置跨三层取mac 3.配置策略 验证&#xff1a; “您的每一次阅读、点赞和分享&#xff0c;都是对我最大的鼓舞和动力。” 如果对亲爱您有所帮助&#xff0c;可以尝试支持一下博主&#xff0c;让博主更有动力 1.交换机配置…

nodejs express vue uniapp新闻发布系统源码

开发技术&#xff1a; node.js&#xff0c;mysql5.7&#xff0c;vscode&#xff0c;HBuilder nodejs express vue uniapp 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索新闻&#xff0c;新闻分类&#xff0c;新闻列表 点击新闻进入新闻详情&#xff0…

Ubuntu18 Opencv3.4.12 viz 3D显示安装、编译、移植

Opencv3.*主模块默认包括两个3D库 calib3d用于相机校准和三维重建 &#xff0c;viz用于三维图像显示&#xff0c;其中viz是cmake选配。 参考&#xff1a; https://docs.opencv.org/3.4.12/index.html 下载linux版本的源码 sources。 查看cmake apt list --installed | grep…

如何在IAR软件中使用STLINK V2编译下载和调试stm8单片机

安装使用IAR后&#xff0c;如使用系统默认设置&#xff0c;往往很难正常实现用stlink v2来下载和调试stm8芯片&#xff0c;我的解决方法如下&#xff1a; 1、打开项目的options菜单&#xff1a; 2、在项目的选项菜单中选择ST-LINK作为调试工具&#xff1a; 3、选择额外的输出…

【C+进阶之路】第六篇:C++11

文章目录 一、【C】C11&#xff08;1&#xff09;二、【C】C11&#xff08;2&#xff09; 一、【C】C11&#xff08;1&#xff09; 【C】C11&#xff08;1&#xff09; 二、【C】C11&#xff08;2&#xff09; 【C】C11&#xff08;2&#xff09; &#x1f339;&#x1f33…

AT89S52单片机

目录 一.AT89S52单片机的硬件组成 1.CPU(微处理器) (1)运算器 (2)控制器 2.数据存储器 (RAM) (1)片内数据存储器 (2)片外数据存储器 3.程序存储器(Flash ROM) 4.定时器/计数器 5.中断系统 6.串行口 7.P0口、P1口、P2口和P3口 8.特殊功能寄存器 (SFR) 常用的特殊功…

机器视觉系统选型-环形光源分类及应用场景

环形光源主要分为&#xff1f; 1.环形光源(高角度) 照射光线与水平方向成高角度夹角 外观缺陷检测字符识别PCB基板检测二维码读取- 2.环形光源(低角度) 照射光线与水平方向成低角度夹角各种边缘提取字符识别玻璃断面的损伤检测金属表面刻印、损伤 3.环形光源(高亮) 高亮度远…