1.9k 2 分钟

# 享元模式 属于结构型模式。 运用共享技术有效地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销。如果能把那些不同的参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度减少单个实例的数目。 在 CSharp 中,string 就是运用了享元模式。例:声明两个字符串 string A = "A"; string B = "A"; 使用 Object.ReferenceEquals (A, B); 检查 A 和 B 是否是相同的实例,结果:true # 类图 # 代码 #...
3.7k 3 分钟

# CSharp 多线程 每一个运行的程序是一个进程,每个进程可以有一个或者多个线程。 在单核系统的一个单位时间内 ,CPU 只能运行单个线程,运行顺序取决于线程的优先级。如果在单位时间内线程未能完成执行,系统就会把线程的状态信息保存到线程的本地储存器(TLS)中,以便下次执行时恢复执行。因为 CPU 的处理速度很快,所以我们感知不到停顿。因为切换频密,所以多线程可被视作同时运行,而实际上这是假象。 在多核系统的一个单位时间内,进程或线程可以在不同的 CPU 中运行,实现真正的并行处理。 # 线程生命周期 线程生命周期开始于 System.Threading.Thread...
4.9k 4 分钟

# Socket Socket(计算机术语为:套接字)是计算机网络编程中的一种通信机制,使网络上的两个程序通过一个双向的通信连接实现数据的交换。它是一个抽象层,提供了一套标准的接口,使得应用程序可以通过这套接口与网络通信协议进行交互,实现数据传输和共享。 在网络编程中,Socket 通常被用来实现客户端和服务端之间的通信。客户端通过 Socket 连接到服务端,并向服务端发送数据请求,服务端接收请求并处理后,再将结果返回给客户端。这种通信方式可以用于实现各种不同类型的网络应用程序,如 Web 服务器、聊天软件、在线游戏等。 Socket...
1.6k 1 分钟

# 责任链模式 属于行为型模式。 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 优点: 降低耦合度。 简化了对象,使得对象不需要知道链的结构。 增强给对象指派职责的灵活性,可以随时增加或修改处理一个请求的结构。 易扩展。 缺点: 一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理 不正确的配置可能会造成循环调用(死循环) 可能会增加调试的难度 # 类图 # 代码 # 处理者抽象类 namespace...
2.9k 3 分钟

# 命令模式 属于行为型模式。 将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 优点: 能够比较容易地设计一个命令队列 在需要的情况下,可以较容易地将命令记入日志 允许接收请求的一方决定是否要否决请求 可以容易地实现对请求的撤销和重做 容易扩展 # 类图 # 代码 # 命令类 namespace BehavioralPatterns_CommandPattern{ /// <summary> /// 命令 /// </summary> public abstract...
1.2k 1 分钟

# 桥接模式 属于结构型模式。 将抽象部分(主体类)与实现部分(主题类成员)分离,使它们都可以独立的变化。 适用性: 不希望使用继承导致系统类的个数急剧增加 一个类存在多个维度的变化,且多个维度都需要进行扩展 # 类图 # 代码 # 拥有桥接关系的类 namespace StructuralPattern_BridgePattern{ /// <summary> /// 颜色 /// </summary> public abstract class Color { /// <summary>...
1.5k 1 分钟

# 迭代器模式 属于行为型模式。 提供一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示。 现在,迭代器模式的实用价值远不如学习价值了,因为现在的高级编程语言已经把这个模式做在语言中了。CSharp 中的迭代器就是一个例子。 接下来讲解的内容不是传统的迭代器模式,而是复刻 foreach 的功能。 # 类图 # 代码 # 用于测试的类 namespace BehavioralPatterns_IteratorPattern{ public class Shape { public string Name; public...
1.9k 2 分钟

# 组合模式 属于结构型模式,它创建了一个树形结构。 将对象组合成树形结构以表示 "部分 - 整体" 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 应用场景: 想表示对象的部分 - 整体层次结构(树形结构)。 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 # 类图 # 代码 # 组件抽象类及其子类 namespace StructuralPattern_CompositePattern{ /// <summary> /// 组件 ///...
1.9k 2 分钟

# 备忘录模式 属于行为型模式。 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 应用场景: 如果在某个系统中使用命令模式,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来储存可撤销操作的状态。 当角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时储存起来的备忘录将状态复原。 数据库的事务管理 存档 缺点:消耗资源,状态数据越多,内存占用就越大。 解决方法:将数据储存到文件中(.txt、.xml、.dat 等文件),由内存占用转变为磁盘占用。 # 类图 # 代码 # 存档类 namespace...