1.8k 2 分钟

# 适配器模式 属于结构型模式。 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有的对象与某个接口匹配。 适配器模式分为两种:类适配器模式、对象适配器模式 类适配器模式:通过多重继承对一个接口与另一个接口进行匹配,但是 Java、CSharp、VB 等语言都不支持多重继承(C++...
2.7k 2 分钟

# 状态模式 属于行为型模式。 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。 在面临大量的 if else 语句时,使用状态模式可以消除这些 if else 语句,并且可以封装变化点,新增条件和状态时,只需要在原来的基础上进行扩展即可。 在有限状态机中使用了这种模式。 # 类图 # 代码 # 状态类 namespace BehavioralPatterns_StatePattern{ /// <summary> /// 状态类 ///...
4.3k 4 分钟

# 抽象工厂模式 属于创建型模式。 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 缺点:难以扩展 适用性: 一个系统要独立于它的产品的创建、组合和表示时(创建与表示分离) 一个系统要由多个产品系列中的一个来配置时(在多个系列中选择一个系列) 当你要强调一系列相关的产品对象的设计以便进行联合使用时(同系列中有多种产品) 当你提供一个产品类库,而只想显示它们的接口而不是实现时(客户端依赖抽象) # 类图 数据的储存分为客户端和服务端 需要储存的数据的类型有很多(本文以 User 和 Character 为例) # 代码 # 用于数据储存的类 namespace...
1.8k 2 分钟

# 观察者模式 属于行为型模式。 它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 CSharp 事件就是观察者模式。接下来的演示将不会使用委托和事件,而是使用接口来实现。 # 类图 # 代码 # 观察者接口以及实现接口的类 namespace BehavioralPatterns_ObserverPattern{ /// <summary> /// 观察者 /// </summary> public interface Observer { ///...
2.4k 2 分钟

# 建造者模式 属于创建型模式。 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 用户只需要指定需要建造的类型就可以得到它们,如果需要改变一个产品的表示,只需要新创建一个建造者即可。 # 类图 # 代码 # 产品 namespace CreationalPatterns_BuilderPattern{ /// <summary> /// 形状 /// </summary> public class...
7k 6 分钟

# 性能优化 性能优化是指通过改进软件、系统或者代码的设计与实现,使其在执行过程中达到更高的运行效率和更低的资源消耗。性能优化旨在提升程序的响应速度、吞吐量、资源利用率以及用户体验。 性能优化涉及多个方面,包括但不限于以下几个方面: 算法优化:选择更高效的算法或者数据结构,减少计算量和存储空间的使用。 代码优化:改进代码的执行效率和资源利用,例如减少循环次数、消除冗余计算、合理使用缓存等。 并发优化:充分利用多核处理器和并发编程技术,提高程序的并发处理能力,减少资源竞争和延迟。 IO 优化:减少磁盘、网络和其他 IO 操作对性能的影响,采用缓存、异步...
732 1 分钟

# .meta 文件 .meta 文件是 Unity 引擎中用于存储关于其他文件的元数据的文件。每个 .meta 文件都与一个特定的文件关联并拥有与之相同的命名,它保存了有关该文件的各种信息,包括但不限于以下内容: fileFormatVersion: 文件的格式版本号。 guid: 资源的唯一标识符(Globally Unique Identifier)。 timeCreated /timeModified: 文件的创建时间和修改时间。 userName /lastModifiedInspector: Unity 用户的用户名、上一次修改资源的检查器类型。 licenseType:...
1k 1 分钟

# 外观模式 属于结构型模式。 隐藏系统的复杂性,并向客户端提供易于使用的接口。 使用场景: 设计初期阶段,应该要有意识的将不同的两个层分离(比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层、表示层之间建立外观类) 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观类可以减少他们之间的依赖 在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但是新的需求开发必须要依赖它。此时就可以为新系统开发一个外观类,可以让外观类与遗留代码交互所有复杂的工作 # 类图 # 代码 # 创建一个类作为例子 namespace...
1k 1 分钟

# 模板模式 属于行为型模式。 一个抽象类公开定义了执行它的方法的方式 / 模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 # 类图 # 代码 # 抽象类及其子类 namespace BehavioralPatterns_TemplatePattern{ /// <summary> /// 形状 /// </summary> public abstract class Shape { /// <summary> /// 形状 ///...
4.5k 4 分钟

# 原型模式 属于创建型模式。 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型模式是通过拷贝一个现有对象生成新的对象,当直接创建对象的代价比较大时,则采用这种模式。 拷贝分为深拷贝和浅拷贝,接下来将分别介绍。 使用场景: 资源优化 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等 性能和安全要求的场景 通过 new...