C#设计模式入门实战教程

news/2024/11/15 10:05:01/文章来源:https://www.cnblogs.com/Can-daydayup/p/18395421

什么是设计模式

设计模式是对面向对象设计中反复出现的问题的解决方案。它们提供了被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。

设计模式的作用

  • 提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代码结构或逻辑。
  • 增强代码的可读性:设计模式使用清晰、简洁的方式表达复杂的代码逻辑,使得其他开发者能够更容易地理解和维护代码。
  • 提高系统的可维护性:设计模式遵循一定的设计原则,如开闭原则、里氏代换原则等,这些原则有助于降低系统各部分的耦合度,提高系统的可扩展性和可维护性。

设计模式分类

设计模式可以被分为以下三大类:

  • 创建型模式(Creational Patterns)
  • 结构型模式(Structural Patterns)
  • 行为型模式(Behavioral Patterns)

创建型模式(Creational Patterns)

创建型模式主要关注于对象的创建过程。它们提供了一种创建对象的最佳方式,而不仅仅是直接使用 new 关键字。这样做的好处包括提高代码的重用性、减少依赖以及简化对象的创建过程。常见的创建型模式包括:

  1. 单例模式(Singleton Pattern)
  2. 工厂方法模式(Factory Method Pattern)
  3. 抽象工厂模式(Abstract Factory Pattern)
  4. 简单工厂模式(Simple Factory Pattern)
  5. 建造者模式(Builder Pattern)
  6. 原型模式(Prototype Pattern)

结构型模式(Structural Patterns)

结构型模式主要关注于如何通过组合类或者对象来获得更大的结构。它们通常用来处理类或对象之间的组合关系。常见的结构型模式包括:

  1. 适配器模式(Adapter Pattern)
  2. 桥接模式(Bridge Pattern)
  3. 组合模式(Composite Pattern)
  4. 装饰器模式(Decorator Pattern)
  5. 外观模式(Facade Pattern)
  6. 享元模式(Flyweight Pattern)
  7. 代理模式(Proxy Pattern)

行为型模式(Behavioral Patterns)

行为型模式主要关注于对象之间的通信。它们描述了类或对象之间如何交互以及如何分配职责。常见的行为型模式包括:

  1. 策略模式(Strategy Pattern)
  2. 模板方法模式(Template Method Pattern)
  3. 观察者模式(Observer Pattern)
  4. 迭代器模式(Iterator Pattern)
  5. 状态模式(State Pattern)
  6. 命令模式(Command Pattern)
  7. 职责链模式(Chain of Responsibility Pattern)
  8. 中介者模式(Mediator Pattern)
  9. 备忘录模式(Memento Pattern)
  10. 访问者模式(Visitor Pattern)

C#实现的设计模式示例代码

设计模式 C# 版( .NET 6),有系列文章讲解:

推荐学习书籍

设计模式之禅(第2版),在线免费阅读地址:https://www.kancloud.cn/sstd521/design/193489

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

  • 开源地址:https://github.com/sheng-jie/Design-Pattern

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

  • GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
  • Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES安装

1.初识elasticsearch Elasticsearch的官方网站如下: https://www.elastic.co/cn/elasticsearch/ 1.1.认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括:Elasticsearch:用于数据存储、计算和搜索 Logstash/Be…

java-URLDNS 链条审计

java-URLDNS 链条审计 URLDNS 链条,是我们学习 java 反序列化的启蒙链条,通过 java 内置的类函数调用,达到 DNS 外带数据的目的。 首先让我们来看一个小实验 从 dnslog.cn 平台获取一个域名 public class urlDNS {public void URL() throws UnknownHostException {InetAddre…

进程间通信——消息队列(通俗易懂)

消息队列 概念消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列包括 POSIX 消息队列和 System V 消息队列。消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UN…

我克隆了我自己,数字生命有什么意义?

个人语音模型、个人视频模型、个人LLM语言模型都是基于开源的项目,但是需要进行少量的代码修改和集成的工作,这个过程不说很艰难,但是确实遇到很多问题。1. 场景... 2 2. 数字生命意义... 2 3. 具体实现思路... 4 1. 场景孩子:爸爸,今天天气不错,我们一起去打篮球吧?!…

Python批量分割Excel后逐行做差、合并文件的方法

本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,首先依据某一列数据的特征截取我们需要的数据,随后对截取出来的数据逐行求差,并基于其他多个文件夹中同样大量的Excel表格文件,进行数据跨文件合并的具体方法~本文介绍基于Python语言,针…

手动脱壳学习笔记1----手动脱upx壳

ESP定律脱壳 例题 https://files.buuoj.cn/files/ee7f29503c7140ae31d8aafc1a7ba03f/attachment.tar 两下F9按一下F9,ESP变红在ESP处右键在内存窗口处转到在下面的内存下硬件断点再按一下F9在401280处下断点scylla插件输入00401820最后处理

我的第一次随笔

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024/join?id=CfDJ8AOXHS93SCdEnLt5HW8VuxRT6AQqVs0mNHhOMFCtt8IMscU6Av_iCXeJ1yrZksLek4Sb4eQ33ielNgQZ17WNvtTHzyIIaHFdy4c1XbJ0CE2yknMRYdVBQ0jOrgoKTOKwvcAZuUiQqpoOYBFbKCcvozo要求 https://edu.cnblogs.com/campus/fzu/S…

应用程序报错漏洞修复

漏洞描述 错误页面由服务器产生400、403、404、500等错误时,返回详细错误信息。报错信息中可能会包含服务器代码信息、服务器版本信息、模板类型、数据库连接信息、SQL语句或者敏感文件的路径。修复 修改nginx配置# 其他配置...server {# 其他配置...# 指定 400 错误页面error…

PbootCMS模板调用幻灯片轮播图及参数说明

在 PbootCMS 中,{pboot:slide} 标签用于输出指定分组的幻灯片。以下是一个详细的示例,展示了如何使用 {pboot:slide} 标签来输出指定分组的幻灯片,并控制显示的数量。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3…

2-SAT 学习笔记

一、简介 k-SAT (satisfiability) 解决这样一类问题:给定 \(n\) 个布尔变量和 \(m\) 条限制,每条限制形如 \(x_1=0/1\or\cdots\or x_n=0/1\) ,求是否有解并给出构造。 当 \(k\gt 2\) 时,该问题为 NP 完全问题。 二、算法流程 在学习本算法前,请确保你对有向图强连通分量有…

pbootcms模板首页如何调用指定栏目的子栏目

在 PbootCMS 中,可以通过 {pboot:nav} 标签来调用指定栏目的子栏目。以下是具体的实现方法和示例代码。 示例代码html{pboot:nav parent=4 num=7} <a href="[nav:link]">[nav:name]</a> {/pboot:nav}参数说明parent: 指定父栏目的 ID。示例中的 parent=…

pbootcms模板标签序数从2开始

在 PbootCMS 中,{pboot:nav} 和 {pboot:list} 标签用于处理导航和列表数据。本文将详细介绍这两种标签的使用方法,并结合实际示例进行说明。 1. 导航标签 ({pboot:nav}) 基本用法 {pboot:nav} 标签用于遍历导航数据。可以结合条件判断和参数来控制显示的内容。 参数说明num: …