C#设计模式第二版:完整指南

需积分: 20 33 下载量 201 浏览量 更新于2024-12-04 收藏 907KB PDF 举报
"C#设计模式(第二版).pdf,由Terrylee整理,涵盖了C#中的23种设计模式,分为创建型、结构型和行为型三大类别,旨在帮助C#中级开发者深入理解并应用设计模式。" 设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,具有高度的复用性和可读性。C#设计模式(第二版)深入探讨了C#编程中如何应用这些模式,以提高代码质量、可维护性和可扩展性。 一.创建型模式主要关注对象的创建过程,确保在系统中对象的创建符合特定的需求。包括: 1.单件模式(Singleton Pattern):保证一个类只有一个实例,常用于配置中心、缓存管理等场景。单件模式通常采用私有构造函数和静态方法来实现。 2.抽象工厂(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定其具体类。适用于跨平台或者需要多种产品族的场合。 3.建造者模式(Builder Pattern):将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。适用于对象构建过程复杂且需要分步骤进行的情况。 4.工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化推迟到子类。 5.原型模式(Prototype Pattern):通过复制已有对象来创建新对象,减少创建新对象的成本,适用于对象创建代价较高或频繁创建/销毁的情况。 二.结构型模式关注如何组织类和对象,以形成更复杂的结构: 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):将请求封装为一个对象,使得可以使用不同的请求、队列请求、支持撤销操作。适用于需要记录操作日志或支持撤销/重做功能的系统。 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):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。适用于对对象结构进行操作,而对象结构可能会随着时间推移而改变的场景。 以上23种设计模式是软件设计中的宝贵财富,理解并合理运用它们,可以帮助开发者写出更优雅、更易于维护的代码。
2013-07-14 上传
1、 FACTORY —追 MM 少不了请吃饭了, 麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西, 虽然口味有所不同, 但不管你带 MM 去麦当劳或肯德基, 只管向服务员说“来四个鸡翅”就行 了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消 工厂模式 费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如 何创建及如何向客户端提供。 2、BUILDER — MM 最爱听的就是“我爱你”这句话了,见到不同地方的 MM,要能够用她们的 、 方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到 MM 我只要按对应的键, 它就能够用相应的语言说出“我爱你”这句话了, 国外的 MM 也可以轻松 搞掂,这就是我的“我爱你”builder。 (这一定比美军在 伊拉克用的翻译机好卖) 建造模式: 从而使一个建造过程生成具有不 建造模式 将产品的内部表象和产品的生成过程分割开来, 同的内部表象的产品对象。 建造模式使得产品内部表象可以独立的变化, 客户不必知道产品 内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 3、FACTORY METHOD —请 MM 去麦当劳吃汉堡,不同的 MM 有不同的口味,要每个都记住 、 是一件烦人的事情,我一般采用 Factory Method 模式,带着 MM 到服务员那儿,说“要一个 汉堡”,具体要什么样的汉堡呢,让 MM 直接跟服务员说就行了。 工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节。 4、 、 PROTOTYPE —跟 MM 用 QQ 聊天, 一定要说些深情的话语了, 我搜集了好多肉麻的情话, 需要时只要 copy 出来放到 QQ 里面就行了, 这就是我的情话 prototype 了。 (100 块钱一份, 你要不要) 原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先确定的等级结构, 原始模型模式适用于任何的等级结构。 缺点是每 一个类都必须配备一个克隆方法。 5、 、 SINGLETON —俺有 6 个漂亮的老婆, 她们的老公都是我, 我就是我们家里的老公 Sigleton, 她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事) 单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到了一个美女 Sarah,从香港来的,可我不会说粤语,她不 、 会说普通话,只好求助于我的朋友 kent 了,他作为我和 Sarah 之间的 Adapter,让我和 Sarah 可以相互交谈了(也不知道他会不会耍我) 适配器模式: 从而使原本因接口原因不 适配器模式 把一个类的接口变换成客户端所期待的另一种接口, 匹配而无法一起工作的两个类能够一起工作。 适配类可以根据参数返还一个合适的实例给客 户端。 7、BRIDGE —早上碰到 MM,要说早上好,晚上碰到 MM,要说晚上好;碰到 MM 穿了件新 、 衣服, 要说你的衣服好漂亮哦, 碰到 MM 新做的发型, 要说你的头发好漂亮哦。 不要问我“早 上碰到 MM 新做了个发型怎么说”这种问题,自己用 BRIDGE 组合一下不就行了 桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关 桥梁模式 联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是 继承关系,从而使两者可以独立的变化。 8、COMPOSITE —Mary 今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店, 、 你自己挑。”“这件 T 恤挺漂亮,买,这条裙子好看,买,这个包也不错, 买。”“喂,买了 三件了呀,我只答应送一件礼物的哦。”“什么呀,T 恤加裙子加包包,正好配成一套呀,小 姐,麻烦你包起来。”“……”,MM 都会用 Composite 模式了,你会了没有? 合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的