C#设计模式
文章目录
- 项目地址
- 一、开放封闭原则
- 1.1 不好的版本
- 1.2 将BankProcess的实现改为接口
- 1.3 修改BankStuff类和IBankClient类
- 二、依赖倒置原则
- 2.1 高层不应该依赖于低层模块
- 2.1.1 不好的例子
- 2.1.2 修改:将各个国家的歌曲抽象
- 2.2 抽象不应该依于细节
- 2.2.1 不同的人开不同的车(接口注入)
- 2.2.2 构造函数注入
- 三、接口隔离原则
项目地址
- 教程作者:老赵Net
- 教程地址:
https://www.bilibili.com/video/BV1Xv4y1T7by?spm_id_from=333.788.videopod.episodes&vd_source=791e6deaa9c8a56b1f845a0bc1431b71&p=5
- 代码仓库地址:
- 所用到的框架和插件:
dbt
airflow
一、开放封闭原则
- 业务描述,不用需求得用户去银行办理不用的业务
- 分析业务:①该业务需要多少个对象?②每个对象的属性和行为是什么
- 确定对象:①用户对象,属性(存钱用户,取钱用户);②银行柜员,帮助用户处理不同的需求;③银行业务系统:处理存钱,取钱,转账的操作
1.1 不好的版本
public class Program
{public static void Main(){BankUsers bankUsers = new BankUsers();bankUsers.BankTpe = "存钱";BankStuff bankStuff = new BankStuff();bankStuff.HandleBandProcess(bankUsers); }
}public class BankUsers
{public string BankTpe { get; set; }
}public class BankStuff
{//实例化一个BankProcess对象用来处理银行业务private BankProcess bankProcess = new BankProcess();public void HandleBandProcess(BankUsers bankUsers){switch (bankUsers.BankTpe){case "存钱":bankProcess.SaveMoney();break;case "取钱":bankProcess.GetMoney();break;case "转账":bankProcess.Transfer();break;default:break;}}
}public class BankProcess
{public void SaveMoney(){Console.WriteLine("处理用户存钱");}public void GetMoney(){Console.WriteLine("处理用户取钱");}public void Transfer(){Console.WriteLine("处理用户转账");}
}
- 问题:
- BankProcess不符合单一职责原则,修改三个方法的时候,都会影响这个类
- 在BankStuff里全是case,如果代码里全是case,肯定不符合设计模式
1.2 将BankProcess的实现改为接口
- 如何判断一个类设计的好坏就是:当你要修改类里面重要的方法的时候,不会影响到方法的执行!例如:我们对BankProcess里的取钱方法进行修改时候,整个BankProcess类是没办法使用的,只能当我们把全部功能改好了之后,这个类才能使用;
- 就类似于修路,路的主要功能有人行道和车行道路,我们在修人行道的时候,不能影响到车行道的车辆通行,才是一个好类的设计思想。
public class Program
{public static void Main(){BankUsers bankUsers = new BankUsers();bankUsers.BankTpe = "存钱";BankStuff bankStuff = new BankStuff();bankStuff.HandleBandProcess(bankUsers);}
}</相关文章:
C#设计模式
文章目录 项目地址一、开放封闭原则1.1 不好的版本1.2 将BankProcess的实现改为接口1.3 修改BankStuff类和IBankClient类二、依赖倒置原则2.1 高层不应该依赖于低层模块2.1.1 不好的例子2.1.2 修改:将各个国家的歌曲抽象2.2 抽象不应该依于细节2.2.1 不同的人开不同的车(接口…...
仪表板展示|DataEase看中国:历年双十一电商销售数据分析
背景介绍 2024年“双十一”购物季正在火热进行中。自2009年首次推出至今,“双十一”已经成为中国乃至全球最大的购物狂欢节,并且延伸到了全球范围内的电子商务平台。随着人们消费水平的提升以及电子商务的普及,线上销售模式也逐渐呈现多元化…...
急着骂华为?我劝你别急
文 | AUTO芯球 作者 | 雷慢 赛力斯这下怒了! 要对那些华为黑、问界黑出手了, 就在这几天,赛力斯起诉了一批蓄意抹黑、散步虚假信息的人。 起因是什么,听我慢慢说, 今年7月,佛山一辆问界M7发生交通事故…...
虚拟机linux7.9下安装mysql
1.MySQL官网下载安装包: MySQL :: Download MySQL Community Server https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 2.解压文件: #tar xvzf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 3.移动文件&#…...
【Linux】一篇文章轻松搞懂基本指令
本篇所有展示代码均是在超级用户的权限下进行的,如果不是超级用户并且一些命令执行的和我的不太一样,那么可以试着在对应命令前暂且加上sudo,我们在下一篇会讲权限问题,到时候再转换为普通用户。 本篇展示的内容是基于CentOs进行…...
深入浅出理解Spring和SpringBoot,剖析自动配置源码
文章目录 1.Spring2.SpringBoot3.小结 1.摘要 本文旨在带大家理解Spring框架和SpringBoot框架最为核心的部分,自Spring和SpringBoot问世以来,给Web开发掀起了巨大的浪潮,极大的缩短项目开发周期,下面将带大家分析Spring和SpringBo…...
Spring配置文件初始化加载(一)
1.枚举 public enum TestEnum {type_01("01", "zeroTest01ServiceImpl"),type_02("02", "zeroTest02ServiceImpl"),type_03("03", "zeroTest03ServiceImpl");private String type;private String pathClass; } …...
正则表达式 - 简介
正则表达式 - 简介 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,它允许用户通过特定的模式(pattern)来搜索、匹配、查找和替换文本中的数据。正则表达式广泛应用于文本编辑器…...
【电机控制器】STC8H1K芯片——ADC电压采集
【电机控制器】STC8H1K芯片——ADC电压采集 文章目录 [TOC](文章目录) 前言一、ADC1.ADC初始化1.ADC_CONTR2.ADCCFG3.ADCTIM4.代码 2.ADC读取1.ADC_RES、ADC_RESL2.代码 3.VREF电压读取——MCU工作电压1.MCU工作电压计算公式2.代码 4.ADC被转换通道的输入电压读取1.ADC被转换通…...
图像格式中的 stride 和 pix stide
最近发现media codec 解码后 yuv 的拷贝时间很大,进一步分析后发现底层会一个像素一个像素拷贝,非常花时间。用过调整解码后图像的Stride(步幅)后直接进行内存块拷贝,可以大幅缩短拷贝时间 在YUV图像格式中,…...
传统POE供电P1摄像头实现
首先,我们来了解一下什么是poe供电?poe供电是一种通过网络线(通常为网线)传输电能的技术。这种技术可以省去马达、插头等传统供电设备,以及不需要另外的电源延长线,从而实现方便的供电。 那么,…...
云计算基础:AWS入门指南
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算基础:AWS入门指南 云计算基础:AWS入门指南 云计算基础:AWS入门指南 引言 AWS概述 什么…...
pytorch torch.tile用法
指定各维度分别重复多少次 tile 是 PyTorch 中用于重复张量的函数。它可以沿指定的维度重复张量的元素。以下是一个示例代码,展示 tile 的用法: import torch# 创建一个张量 weight_hh torch.tensor([[1, 2], [3, 4]])# 假设批量大小为3 bs 3# 使用 …...
实战项目:通过自我学习让AI学习五子棋 - 1 - 项目定义
项目介绍 五子棋是一种博弈游戏。在棋盘上黑子和白子交替落子,先于在任何方向上将至少五个棋子连在一起的一方获胜。在我们这个项目中我们尝试使用自学习的方法训练出一套走五子棋的算法。 这个项目本身并无特别大的实用价值。我们的目的在于: 尝试自…...
统信UOS开发环境支持Electron
全面支持Electron开发环境,同时还提供了丰富的开发工具和开发资源,进一步提升工作效率。 文章目录 一、环境部署1. Electron应用开发介绍2. Electron开发环境安装安装Node.js和npm安装electron环境配置二、代码示例Electron开发案例三、常见问题一、环境部署 1. Electron应用…...
2024.11.09【BUG报错】| Fastuniq “Error in Reading pair-end FASTQ sequence!”解决方案
解决 Fastuniq 中“Error in Reading pair-end FASTQ sequence!”报错的指南 在使用 Fastuniq 进行高通量测序数据分析时,用户可能会遇到“Error in Reading pair-end FASTQ sequence!”的错误提示。这通常表明在读取配对的 FASTQ 序列时出现了问题。以下是一些可能…...
k8s组件原理
文章目录 1、kubernetes控制平面组件1、kube-apiserver2、etcd3、controller-manager4、schedule 2、node组件1、kubelet2、container runtime3、kube-proxy 3、附加组件1、kubedns2、dashboard 4、创建pod的原理 1、kubernetes控制平面组件 1、kube-apiserver 是公开kubernete…...
0基础跟德姆(dom)一起学AI 深度学习02-Pytorch基本使用
1 基本介绍 (1)什么是Pytorch? PyTorch是一个开源机器学习和深度学习框架。PyTorch 允许您使用 Python 代码操作和处理数据并编写深度学习算法,能够在强大的GPU加速基础上实现张量和动态神经网络。 PyTorch是一个基于 Python 的科学计算包…...
九州未来再度入选2024边缘计算TOP100
随着数智化转型的浪潮不断高涨,边缘计算作为推动各行业智能化升级的重要基石,正在成为支持万物智能化的关键点。近日,德本咨询(DBC)联合《互联网周刊》(CIW)与中国社会科学院信息化研究中心(CIS),共同发布《2024边缘计算TOP100》榜…...
《物理化学学报》
《物理化学学报》主要刊载化学学科物理化学领域具有原创性实验和基础理论研究类文章。《物理化学学报》的办刊宗旨是引领物理化学前沿、服务国家战略需求,坚持正确的办刊方针,以促进学术交流及本学科发展为已任,为发现和培养科技人才服务&…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
