责任链模式
本博客大部分内容来于免费在线学习设计模式
1:责任链模式责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。
2:责任链模式问题在日常生活中,请假,出差,申请活动等等。一件事可能需要经过多个对象的处理。举个例子:你写了一个办公程序,最初设置的是只需要部门主管同意,后面又逐渐增加人事,领导等等很多步骤。现在需要另外增加另一项功能,也需要这些审批手续(也可能是部分)。这一段代码怎么写呢?直接复制代码吗,本来每次增加步骤都会使代码更加臃肿,再对这些臃肿的代码进行复制,系统会变成怎样呢?
3:责任链模式解决方案责任链会将特定行为转换为被称作处理者的独立对象。在上述示例中,每个审批步骤都可被抽取为仅有单个方法的类,并执行审批操作。 请求及其数据则会被作为参数传递给该方法。
模式建议你将这些处理者连成一条链。链上的每个处理者都有一个成员变量来保存对于下一处理者的引用。除了处理请求外,处理者还负责沿着链传递请求。请求会在链上移动,直至所有处理者都有机会对其进行处理。
最重要的是:处理者可以决定不再沿着链传递请求, ...
迭代器模式
本博客大部分内容来于免费在线学习设计模式
1:迭代器模式迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。
2:迭代器模式问题在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。而且不断向集合中添加遍历算法会模糊其 “高效存储数据” 的主要职责。 此外, 有些算法可能是根据特定应用订制的, 将其加入泛型集合类中会显得非常奇怪。
另一方面, 使用多种集合的客户端代码可能并不关心存储数据的方式。 不过由于集合提供不同的元素访问方式, 你的代码将不得不与特定集合类进行耦合。
既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:
暴露了聚合类的内部表示,使其数据不安全;
增加了客户的负担。
3:迭代器模式解决方案迭代器模式的主要思想是将集合的遍历行为抽取为单独 ...
创建型模式
本博客大部分内容来于免费在线学习设计模式
创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
工厂方法模式工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。
抽象工厂模式抽象工厂(AbstractFactory)模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
生成器模式生成器模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。
原型模式原型模式是一种创建型设计模式,使你能够复制已有对象,而又无需使代码依赖它们所属的类。
单例模式单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。
参考
免费在线学习设计模式
C语言中文网-设计模式
设计模式-结构型模式
结构型模式
本博客大部分内容来于免费在线学习设计模式
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
适配器模式适配器模式是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。它结合了两个独立接口的功能。
桥接模式桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。
组合模式组合模式是一种结构型设计模式,又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。
装饰模式装饰模式是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。即在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)。
外观模式外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。
享元模式享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。
代理模式代理模式是一种结 ...
行为型模式
本博客大部分内容来于免费在线学习设计模式
行为模式负责对象间的高效沟通和职责委派。
责任链模式责任链模式是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。
命令模式命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。
迭代器模式迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。
中介者模式中介者模式是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。
备忘录模式备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
观察者模式观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。
状态模式状态模式是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为, ...
设计模式
本博客大部分内容来于免费在线学习设计模式
本文为设计模式学习笔记
1:设计模式概念设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。是解决特定问题的一般性概念。
设计模式可以使面向对象保持结构良好
设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题。
设计模式定义了一种让你和团队成员能够更高效沟通的通用语言。
算法和设计模式的区别:算法更像是菜谱: 提供达成目标的明确步骤。而模式更像是蓝图: 你可以看到最终的结果和模式的功能,但需要自己确定实现步骤。
2:分类
创建型模式提供创建对象的机制,增加已有代码的灵活性和可复用性。
结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。
行为模式负责对象间的高效沟通和职责委派。
3:六大原则
开闭原则:一个软件实体如类、模块和函数应该对修改封闭,对扩展开放。
单一职责原则:一个类只做一件事,一个类应该只 ...