根据给定文件的信息,本文将深入探讨新版设计模式手册中提到的设计模式,特别是创建型模式、结构性模式以及行为型模式中的关键概念。 ### 一、创建型模式 #### 1. 单件模式(Singleton Pattern) **定义**:保证一个类仅有一个实例,并提供一个全局访问点。 **适用场景**: - 当需要确保一个类只有一个实例存在时。 - 当这个唯一实例可以通过继承进行扩展,并且客户可以在不修改代码的情况下使用扩展后的实例时。 **示例代码**: ```csharp public class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() { } public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } ``` 在实际应用中,单件模式可以用于管理资源,例如数据库连接池或线程池等。 #### 2. 抽象工厂模式(Abstract Factory Pattern) **定义**:提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 **适用场景**: - 系统应该独立于产品实例化过程。 - 系统被设计为提供一系列可选的产品族。 **示例代码**: ```csharp public interface IColor { void Fill(); } public class Red : IColor { public void Fill() { Console.WriteLine("Inside Red::fill() method."); } } public class Green : IColor { public void Fill() { Console.WriteLine("Inside Green::fill() method."); } } public interface IFactory { IShape GetShape(string shapeType); IColor GetColor(string colorType); } public class ShapeFactory : IFactory { public IShape GetShape(string shapeType) { if (shapeType == null) { return null; } if (shapeType.Equals("CIRCLE")) { return new Circle(); } else if (shapeType.Equals("RECTANGLE")) { return new Rectangle(); } return null; } public IColor GetColor(string colorType) { // Implementation for color creation return null; } } ``` #### 3. 建造者模式(Builder Pattern) **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 **适用场景**: - 创建一个复杂对象的算法应该独立于该对象的组成部分及其装配方式。 - 当创建复杂对象的过程必须允许被指导时。 **示例代码**: ```csharp public abstract class Builder { public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract Product GetResult(); } public class ConcreteBuilder1 : Builder { private Product product; public override void BuildPartA() { product.Parts.Add("ConcreteBuilder1 Part A"); } public override void BuildPartB() { product.Parts.Add("ConcreteBuilder1 Part B"); } public override Product GetResult() { return product; } } ``` #### 4. 工厂方法模式(Factory Method Pattern) **定义**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 **适用场景**: - 当一个类不知道它所必须创建的对象的类的时候。 - 当一个类希望由其子类来指定它所创建的对象的时候。 **示例代码**: ```csharp public abstract class Creator { public abstract Product FactoryMethod(); } public class ConcreteCreator1 : Creator { public override Product FactoryMethod() { return new ConcreteProduct1(); } } public class ConcreteProduct1 : Product { public override void Operation() { Console.WriteLine("ConcreteProduct1 Operation"); } } ``` #### 5. 原型模式(Prototype Pattern) **定义**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 **适用场景**: - 当一个类的实例只能有几个不同状态组合中的一种时。 **示例代码**: ```csharp public abstract class Prototype { public abstract Prototype Clone(); } public class ConcretePrototype1 : Prototype { public string Id { get; set; } public ConcretePrototype1(string id) { this.Id = id; } public override Prototype Clone() { return MemberwiseClone() as Prototype; } } ``` ### 二、结构性模式 #### 6. 适配器模式(Adapter Pattern) **定义**:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 **适用场景**: - 想要复用一些已存在的子类,但是接口又与当前系统不一致。 - 想要创建一个可以复用多个现有类的类。 #### 7. 桥接模式(Bridge Pattern) **定义**:将抽象部分与它的实现部分分离,使它们都可以独立变化。 **适用场景**: - 不希望在抽象和它的实现部分之间有一个固定的绑定关系,例如,这种情况可能是因为在程序运行时刻实现部分应可以被选择或者切换。 - 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。 #### 8. 组合模式(Composite Pattern) **定义**:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 **适用场景**: - 用户想表示对象的部分-整体层次结构。 - 用户希望用户可以一致地使用单个对象和组合对象。 #### 9. 装饰模式(Decorator Pattern) **定义**:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 **适用场景**: - 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 - 处理那些可以撤消的职责。 #### 10. 外观模式(Facade Pattern) **定义**:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 **适用场景**: - 开发一个可以被不同开发团队使用的复杂子系统。 - 为一个复杂的子系统提供一个简单的接口。 #### 11. 享元模式(Flyweight Pattern) **定义**:运用共享技术来有效地支持大量细粒度的对象。 **适用场景**: - 一个应用程序使用了大量的相似类。 - 使用共享技术来减少内存中的对象数量。 #### 12. 代理模式(Proxy Pattern) **定义**:为其他对象提供一种代理以控制对这个对象的访问。 **适用场景**: - 远程代理:为了一个对象在不同的地址空间内而产生的一个本地代表。 - 虚拟代理:用来代替一个大对象或开销很大的对象。 - 安全代理:用来控制不同种类客户对真实对象的访问权限。 ### 三、行为型模式 #### 13. 职责链模式(Chain of Responsibility Pattern) **定义**:避免向请求发送者和接收者显式指明彼此,让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 **适用场景**: - 有多个对象可以处理一个请求,但具体哪个对象处理该请求在运行时刻自动确定。 - 想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 #### 14. 命令模式(Command Pattern) **定义**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 **适用场景**: - 程序需要在不同的时刻指定请求,并将请求放入队列。 - 程序需要支持命令的撤销(Undo)操作。 #### 15. 解释器模式(Interpreter Pattern) **定义**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 **适用场景**: - 可以把一个需要解释执行的语言中的句子表示为一个抽象语法树。 - 一些重复发生的解析问题可以用解释器模式解决。 #### 16. 迭代器模式(Iterator Pattern) **定义**:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 **适用场景**: - 访问一个聚合对象的内容而无须暴露它的内部表示。 - 遍历一个聚合对象。 #### 17. 中介者模式(Mediator Pattern) **定义**:用一个中介对象来封装一系列的对象交互。 **适用场景**: - 一组对象以定义良好但是复杂的方式进行通信。这个复杂程度难以控制和分散。 - 想要定制一个分布在多个类中的交互。 #### 18. 备忘录模式(Memento Pattern) **定义**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 **适用场景**: - 需要保存/恢复数据的相关状态(如事务回滚)。 - 如果用公有或受保护的成员变量来保存一个对象的状态,可能会暴露对象实现的内部细节并破坏对象的封装性。 #### 19. 观察者模式(Observer Pattern) **定义**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 **适用场景**: - 当一个抽象模型有两个方面,其中一个方面依赖于另一方面,将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 - 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。 #### 20. 状态模式(State Pattern) **定义**:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 **适用场景**: - 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 - 控制一个对象状态转换的条件表达式过于复杂的情况。 #### 21. 策略模式(Strategy Pattern) **定义**:定义了一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 **适用场景**: - 算法使用客户不应该知道的数据。 - 算法独立于使用它的客户。 #### 22. 模板方法模式(Template Method Pattern) **定义**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 **适用场景**: - 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 - 各子类中公共的行为应被提取出来并集中到一个共同的父类中以避免代码重复。 #### 23. 访问者模式(Visitor Pattern) **定义**:表示一个作用于某对象结构中的各元素的操作。 **适用场景**: - 对象结构中对象对应的类很少改变,但经常需要在此结构上定义新的操作。 - 用户定义的层次结构中的对象包含基本类型,或者用户定义对象的集合。 以上是对新版设计模式手册中提到的各种设计模式的概述。每种模式都有其独特的应用场景和目的,在实际开发中根据项目需求合理选用这些模式,可以极大地提高软件的可维护性和可扩展性。
- 粉丝: 3
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用OpenGL实现渲染场景的shadow map
- 基于springboot+vue+mysql+redis项目工时管理系统前后端分离管理系统【源码+数据库】
- 【java毕业设计】高校信息资源共享平台源码(ssm+jsp+mysql+说明文档+LW).zip
- LOL_params_0900000.pt
- 【java毕业设计】高校校园点餐系统源码(ssm+jsp+mysql+说明文档+LW).zip
- 【小程序+小程序API+后台商城管理+运行指导教程】springboot+mysql实现的供货商城系统
- 【java毕业设计】高校四六级报名管理系统源码(ssm+jsp+mysql+说明文档+LW).zip
- 二千多套IOS项目源码分享下载-第四个300套
- 【java毕业设计】高校二手交易平台源码(ssm+jsp+mysql+说明文档+LW).zip
- 【java毕业设计】高校毕业生就业满意度调查统计系统源码(ssm+jsp+mysql+说明文档+LW).zip