当前位置: 首页 > news >正文

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("处理用户转账");}
}
  • 问题:
    1. BankProcess不符合单一职责原则,修改三个方法的时候,都会影响这个类
    2. 在BankStuff里全是case,如果代码里全是case,肯定不符合设计模式

1.2 将BankProcess的实现改为接口

  1. 如何判断一个类设计的好坏就是:当你要修改类里面重要的方法的时候,不会影响到方法的执行!例如:我们对BankProcess里的取钱方法进行修改时候,整个BankProcess类是没办法使用的,只能当我们把全部功能改好了之后,这个类才能使用;
  2. 就类似于修路,路的主要功能有人行道和车行道路,我们在修人行道的时候,不能影响到车行道的车辆通行,才是一个好类的设计思想。
public class Program
{public static void Main(){BankUsers bankUsers = new BankUsers();bankUsers.BankTpe = "存钱";BankStuff bankStuff = new BankStuff();bankStuff.HandleBandProcess(bankUsers);}
}</
http://www.lryc.cn/news/480078.html

相关文章:

  • 仪表板展示|DataEase看中国:历年双十一电商销售数据分析
  • 急着骂华为?我劝你别急
  • 虚拟机linux7.9下安装mysql
  • 【Linux】一篇文章轻松搞懂基本指令
  • 深入浅出理解Spring和SpringBoot,剖析自动配置源码
  • Spring配置文件初始化加载(一)
  • 正则表达式 - 简介
  • 【电机控制器】STC8H1K芯片——ADC电压采集
  • 图像格式中的 stride 和 pix stide
  • 传统POE供电P1摄像头实现
  • 云计算基础:AWS入门指南
  • pytorch torch.tile用法
  • 实战项目:通过自我学习让AI学习五子棋 - 1 - 项目定义
  • 统信UOS开发环境支持Electron
  • 2024.11.09【BUG报错】| Fastuniq “Error in Reading pair-end FASTQ sequence!”解决方案
  • k8s组件原理
  • 0基础跟德姆(dom)一起学AI 深度学习02-Pytorch基本使用
  • 九州未来再度入选2024边缘计算TOP100
  • 《物理化学学报》
  • 【数据集】【YOLO】【目标检测】树木倒塌识别数据集 9957 张,YOLO道路树木断裂识别算法实战训练教程!
  • iOS 18.2 六大新功能外媒實測|ChatGPT進化版SIRI、自製Genmoji
  • 简单介绍一下mvvm mvc mvp以及区别、历史
  • 达梦8-达梦数据实时同步软件(DMHS)配置-Oracle-DM8
  • mysql常见死锁的分析
  • Go Energy 跨平台(GUI)应用编译和安装包制作
  • 众测遇到的一些案列漏洞
  • 大华乐橙设备私有平台EasyCVR视频设备轨迹回放平台支持哪些摄像机?摄像机如何选型?
  • 实战攻略 | ClickHouse优化之FINAL查询加速
  • 5G NR gNB 逻辑架构及其功能拆分选项
  • PyQt入门指南四十六 性能优化策略