![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 58
vfdn
一年liunx下c/c++开发,三年windows下c/c++开发经验,熟悉多线程、tcp/ip网络编程,熟悉vim、gdb、vs、c++builder等常用开发工具,熟练掌握sql server、timesten、sqlite等数据的开发与使用,了解PHP、python、java等开发,热爱软件技术,学习能力强
展开
-
《设计模式的艺术》笔记 - 访问者模式
1. 增加新的访问操作很方便。使用访问者模式,增加新的访问操作就意味着增加一个新的具体访问者类,实现简单,无须修改源代码,符合开闭原则。2. 将有关元素对象的访问行为集中到一个访问者对象中,而不是分散在一个个的元素类中。类的职责更加清晰,有利于对象结构中元素对象的复用,相同的对象结构可以供多个不同的访问者访问。3. 让用户能够在不修改现有元素类层次结构的情况下,定义作用于该层次结构的操作。原创 2024-01-29 17:43:12 · 612 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 模板方法模式
1. 模板方法模式在父类中形式化地定义一个算法,而由它的子类来实现细节的处理。在子类实现详细的处理算法时并不会改变算法中步骤的执行次序。2. 模板方法模式是一种代码复用技术,它在类库设计中尤为重要。它提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为。它鼓励恰当使用继承来实现代码复用。3. 模板方法模式可实现一种反向控制结构。通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行。原创 2024-01-29 16:52:14 · 620 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 策略模式
1. 策略模式提供了对开闭原则的完美支持。用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。2. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族,恰当使用继承可以把公共的代码移到抽象策略类中,从而避免重复代码。3. 策略模式提供了一种可以替换继承关系的办法。如果不使用策略模式,那么使用算法的环境类就可能会有一些子类,每一个子类提供一种不同的算法。但是,这样一来算法的使用就和算法本身混在一起,不符合单一职责原则。原创 2024-01-24 17:09:24 · 847 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 状态模式
1. 封装了状态的转换规则。在状态模式中可以将状态的转换代码封装在环境类或者具体状态类中,对状态转换代码进行集中管理,而不是分散在一个个业务方法中。2. 将所有与某个状态有关的行为放到一个类中,只需要注入一个不同的状态对象即可使环境对象拥有不同的行为。3. 允许状态转换逻辑与状态对象合成一体,而不是提供一个巨大的条件语句块。状态模式可以避免使用庞大的条件语句来将业务方法和状态转换代码交织在一起。4. 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。原创 2024-01-24 14:51:11 · 980 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 观察者模式
1. 观察者模式可以实现表示层和数据逻辑层的分离。它定义了稳定的消息更新传递机制,并抽象了更新接口,使得可以有各种各样不同的表示层充当具体观察者角色。2. 观察者模式在观察目标和观察者之间建立一个抽象的耦合。观察目标只需要维持一个抽象观察者的集合,无须了解其具体观察者。由于观察目标和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。3. 观察者模式支持广播通信。观察目标会向所有已注册的观察者对象发送通知,简化了一对多系统设计的难度。原创 2024-01-24 11:51:42 · 754 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 备忘录模式
1. 它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤。当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。2. 备忘录实现了对信息的封装。一个备忘录对象是一种原发器对象状态的表示,不会被其他代码所改动。备忘录保存了原发器的状态,采用列表、堆栈等集合来存储备忘录对象可以实现多次撤销操作。原创 2024-01-23 17:51:24 · 811 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 中介者模式
1. 中介者模式简化了对象之间的交互,它用中介者和同事的一对多交互代替了原来同事之间的多对多交互。一对多关系更容易理解、维护和扩展,将原本难以理解的网状结构转换成相对简单的星形结构。2. 中介者模式可将各同事对象解耦。中介者有利于各同事之间的松耦合,可以独立地改变和复用每一个同事和中介者,增加新的中介者和新的同事类都比较方便,更好地符合开闭原则。3. 可以减少大量同事子类生成。原创 2024-01-23 16:58:30 · 722 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 迭代器模式
1. 支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。在迭代器模式中只需要用一个不同的迭代器来替换原有迭代器即可改变遍历算法,也可以自己定义迭代器的子类以支持新的遍历方式。2. 迭代器简化了聚合类。由于引入了迭代器,在原有的聚合对象中不需要再自行提供数据遍历等方法,这样可以简化聚合类的设计。3. 在迭代器模式中,由于引入了抽象层,增加新的聚合类和迭代器类都很方便,无须修改原有代码,满足开闭原则的要求。原创 2024-01-23 14:16:20 · 593 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 解释器模式
1. 易于改变和扩展文法。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。2. 每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。3. 实现文法较为容易。在抽象语法树中每一个表达式节点类的实现方式都是相似的,这些类的代码编写都不会特别复杂,还可以通过一些工具自动生成节点类代码。4. 增加新的解释表达式较为方便。如果用户需要增加新的解释表达式只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改,符合开闭原则。原创 2024-01-22 16:42:17 · 693 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 命令模式
1. 降低系统的耦合度。由于请求者与接收者之间不存在直接引用,因此请求者与接收者之间实现完全解耦,相同的请求者可以对应不同的接收者。同样,相同的接收者也可以供不同的请求者使用,两者之间具有良好的独立性。2. 新的命令可以很容易地加入系统中。由于增加新的具体命令类不会影响到其他类,因此增加新的具体命令类很容易,无须修改原有系统源代码甚至客户类代码,满足开闭原则的要求。3. 可以比较容易地设计一个命令队列或宏命令(组合命令)。4. 为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案。原创 2024-01-19 15:20:38 · 889 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 职责链模式
1. 职责链模式使得一个对象无须知道是其他哪一个对象处理其请求。对象仅需知道该请求会被处理即可,接收者和发送者都没有对方的明确信息,且链中的对象不需要知道链的结构。由客户端负责链的创建,降低了系统的耦合度。2. 请求处理对象仅需维持一个指向其后继者的引用,而不需要维持它对所有的候选处理者的引用,可简化对象的相互连接。3. 在给对象分派职责时,职责链可以提供更多的灵活性,可以通过在运行时对链进行动态的增加或修改来增加或改变处理一个请求的职责。原创 2024-01-19 11:52:08 · 637 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 代理模式
1. 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度,满足迪米特法则。2. 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。3. 远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。4. 虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。原创 2024-01-18 18:14:27 · 797 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 享元模式
1. 可以极大减少内存中对象的数量,使得相同或相似对象在内存中只保存一份,从而可以节约系统资源,提高系统性能。2. 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。原创 2024-01-18 17:13:25 · 729 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 外观模式
1. 对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。2. 实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。3. 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。4. 只是提供了一个访问子系统的统一入口,并不影响客户端直接使用子系统类。原创 2024-01-18 16:24:01 · 938 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 装饰模式
1. 对于扩展一个对象的功能,装饰模式比继承更加灵活性,不会导致类的个数急剧增加。2. 可以通过一种动态的方式来扩展一个对象的功能。通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。3. 可以对一个对象进行多次装饰。通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,得到功能更为强大的对象。4. 具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,原有类库代码无须改变,符合开闭原则。原创 2024-01-18 15:26:45 · 657 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 组合模式
1. 组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次。它让客户端忽略了层次的差异,方便对整个层次结构进行控制。2. 客户端可以一致地使用一个组合结构或其中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。3. 在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合开闭原则。4. 组合模式为树形结构的面向对象实现提供了一种灵活的解决方案。通过叶子对象和容器对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。原创 2024-01-18 12:04:37 · 740 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 桥接模式
1. 分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化(即抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任意组合子类,从而获得多维度组合对象)2. 在很多情况下,桥接模式可以取代多层继承方案。多层继承方案违背了单一职责原则,复用性较差,且类的个数非常多。桥接模式是比多层继承方案更好的解决方法,它极大地减少了子类的个数。3. 桥接模式提高了系统的可扩展性。原创 2024-01-17 18:27:18 · 627 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 适配器模式
1. 将目标类和适配者类解耦。通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。2. 增加了类的透明性和复用性。将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者类的复用性,同一个适配者类可以在多个不同的系统中复用。3. 灵活性和扩展性都非常好。通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合开闭原则。原创 2024-01-17 17:15:00 · 689 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 建造者模式
1. 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。2. 每个具体建造者都相对独立,而与其他具体建造者无关。因此,可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。由于指挥者类针对抽象建造者编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便,符合开闭原则。3. 可以更加精细地控制产品的创建过程。原创 2024-01-16 18:04:44 · 650 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 原型模式
1. 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。2. 扩展性较好。由于在原型模式中提供了抽象原型类,在客户端可以针对抽象原型类进行编程,而将具体原型类写在配置文件中,增加或减少具体原型类对原有系统都没有任何影响。3. 原型模式提供了简化的创建结构。工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构,而原型模式就不需要这样。原型模式中产品的复制是通过封装在原型类中的克隆方法实现的,无须专门的工厂类来创建产品。原创 2024-01-15 17:24:31 · 641 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 抽象工厂模式
1. 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了在抽象工厂中声明的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。2. 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。3. 增加新的产品族很方便,无须修改已有系统,符合开闭原则。原创 2024-01-15 14:51:33 · 611 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 简单工厂模式
优点:1. 工厂类包含必要的判断逻辑,可以决定什么时候创建哪一个产品类的实例。2. 客户端无须知道所创建的具体产品类的类名,只需要知道对应的参数即可。3. 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。缺点:1. 由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响。2. 使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度。3. 系统扩展困难。原创 2024-01-12 15:09:41 · 576 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 工厂方法模式
优点:1. 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节。用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。2. 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,正是因为所有的具体工厂类都具有同一抽象父类。原创 2024-01-12 17:15:03 · 582 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 单例模式
单例模式优点是可以确保系统中只存在单个对象实例,缺点是不便扩展,一定程度上违背单一原则,既提供业务方法,又提供创建对象方法。原创 2024-01-12 11:46:30 · 566 阅读 · 0 评论 -
《设计模式的艺术》笔记 - 面向对象设计原则
抽象不应该依赖于细节,细节应该依赖于抽象。即要针对接口编程,而不是针对实现编程。在程序代码中传递参数时或关联关系时,尽量引用层次高的抽象层类(基类)。所有引用基类的地方必须能透明地使用其子类的对象。即在软件中将一个基类对象替换成其子类对象,程序不会产生任何错误和异常。一个软件实体应当对扩展开放,对修改关闭。即软件实体应当尽量在不修改原有代码的情况下进行扩展。使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。尽量使用对象组合,而不是继承来达到复用的目的。原创 2024-01-12 10:36:41 · 545 阅读 · 0 评论