新版设计模式手册(New Design pattern)
根据给定的信息,我们可以将《新版设计模式手册》中的知识点进行详细解读,主要涉及三大类设计模式:创建型模式、结构型模式以及行为型模式。 ### 创建型模式 #### 1. 单件模式 **意图**:确保某一个类只有一个实例存在,并提供一个全局的访问点。 **适用性**: - 当需要确保一个类只有一个实例,而且能够被多个对象共享,避免重复创建而浪费资源时; - 当唯一实例必须通过子类化来扩展,同时用户又无须更改原代码即可使用一个扩展的实例时。 **示例代码**: ```csharp public class Singleton { private static Singleton instance; protected Singleton() { } public static Singleton Instance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` **实际应用**:在多线程环境中,单件模式常用于创建线程安全的对象,例如数据库连接池或日志管理等。 #### 2. 抽象工厂模式 **意图**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 **适用性**: - 一个系统要独立于它的产品创建、组合方式时; - 一个系统要由多个产品系列中的一个来配置时; - 当要强调一系列相关的产品对象的设计以便进行联合使用时。 **示例代码**: ```csharp public interface IColor { string GetColor(); } public interface IShape { string GetShape(); } public class Red : IColor { public string GetColor() { return "Red"; } } public class Green : IColor { public string GetColor() { return "Green"; } } public class Circle : IShape { public string GetShape() { return "Circle"; } } public class Square : IShape { public string GetShape() { return "Square"; } } public interface IAbstractFactory { IColor CreateColor(); IShape CreateShape(); } public class ColorFactory : IAbstractFactory { public IColor CreateColor() { return new Red(); } public IShape CreateShape() { return null; } } public class ShapeFactory : IAbstractFactory { public IColor CreateColor() { return null; } public IShape CreateShape() { return new Circle(); } } ``` #### 3. 建造者模式 **意图**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 **适用性**: - 当创建复杂对象的算法应该独立于该对象的组成部分及其装配方式时; - 当构造过程必须允许被构造的对象有不同的表示时。 **示例代码**: ```csharp public abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetProduct(); } public class ConcreteBuilder1 : Builder { private Product _product = new Product(); public override void BuildPartA() { _product.Add("PartA1"); } public override void BuildPartB() { _product.Add("PartB1"); } public override Product GetProduct() { return _product; } } public class Product { private List<string> parts = new List<string>(); public void Add(string part) { parts.Add(part); } public string ListParts() { return String.Join(", ", parts); } } ``` #### 4. 工厂方法模式 **意图**:定义一个用于创建对象的接口,但让实现这个接口的类决定实例化哪一个类。 **适用性**: - 当一个类不知道它所必须创建的对象的类的时候; - 当一个类希望由其子类来指定它所创建的对象的时候。 **示例代码**: ```csharp public abstract class Creator { public abstract Product FactoryMethod(); public void SomeOperation() { //... Product product = this.FactoryMethod(); //... } } public class ConcreteCreator1 : Creator { public override Product FactoryMethod() { return new ConcreteProduct1(); } } public class Product { } public class ConcreteProduct1 : Product { } ``` #### 5. 原型模式 **意图**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 **适用性**: - 当要实例化的类是在运行时刻指定时,例如,通过动态装载; - 当要避免创建一个与产品类层次平行的工厂类层次时。 **示例代码**: ```csharp public interface Prototype<T> where T : Prototype<T> { T Clone(); } public class ConcretePrototype1 : Prototype<ConcretePrototype1> { public ConcretePrototype1 Clone() { return new ConcretePrototype1(); } } ``` 以上是创建型模式的介绍及示例,下一部分将详细介绍结构型模式。
剩余150页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 顺丰API查询快递单基于顺丰丰桥SDK开发的用易语言源码 免开发调用 需要收寄人手机号码后四位+单号查询 简单对接接口,快速开发必备 .zip
- 随着前端技术越来越成熟,JS,TS已成为各大厂开发的必备使用语言,本站从易到难深入理解JS,TS,同时提供TS做题功能,让你边学边实践,快速掌握.zip
- 通过中缀、后缀实现一个四则运算器,并设计求解界面,由于我喜欢前端嘛,用前端语言实现起来容易以及界面写起来很顺手 .zip
- 该项目是一个使用TypeScript实现的简易版Web系统框架,旨在提供一套搭建Web应用程序的基础设施 它具备以下主要特点和功能1. 虚拟文件系统2. 语言系统3. 常用接口集合.zip
- 网页编辑器,拖拽读取文件,保存文件,支持大部分编程语言文件编辑,简单易用,无需安装,这正是我想要的.zip
- 电力系统分析:基于VBA的分布式电源最佳接入点判定方法与程序实现
- MATLAB实现线性代数方程组直接解法算法解析与实践案例
- 基于MATLAB的线性代数方程组雅克比迭代解法研究与应用
- 基于MATLAB实现的线性代数方程组高斯消去法解析与应用
- MATLAB实现拉格朗日插值多项式的数值计算方法
评论0