设计模式
文章平均质量分 75
设计模式
attempt_to_do
这个作者很懒,什么都没留下…
展开
-
Reactor模式
1. Reactor模式简介Reactor模式也叫反应器模式,大多数IO相关组件如redis也在使用该模式。 reactor模式原理是I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。2. Reactor的实现eactor 模式主要由 Reactor 和处理资源池这两个核心部分组成,它俩负责的事情如下:Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件;处理资源池负责处理事件,如 read -> 业务逻辑 -> send;原创 2022-05-30 14:02:20 · 600 阅读 · 2 评论 -
行为型模式 - 中介者模式
1. 模式动机在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题:系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。系统扩展性低:增加一个新的对象需要在原有相关对象上增加引用,增加新的引用关系也需要调整原有对象,系统耦合度很高原创 2021-12-28 09:08:06 · 341 阅读 · 0 评论 -
行为型模式 - 命令模式
1. 模式动机在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。2. 模式定义命令模式(Command Pattern):将一个请求原创 2021-12-24 11:54:49 · 354 阅读 · 0 评论 -
创建型模式 - 代理模式
1. 模式动机在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代理对象来间接访问一 个对象,这就是代理模式的模式动机。2. 模式定义代理模式(Proxy Patter原创 2021-12-23 14:32:45 · 87 阅读 · 0 评论 -
结构型模式 - 外观模式
1. 模式定义外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。2. 模式结构外观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色3. 时序图4.代码分析4.1.c++实现#include <iostream>using namespace原创 2021-12-22 16:34:07 · 89 阅读 · 0 评论 -
结构型模式 - 享元模式
1. 模式定义外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。2. 模式结构外观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色3. 时序图4.代码分析4.1.c++实现#include <iostream>using namespace原创 2021-12-22 16:31:18 · 83 阅读 · 0 评论 -
创建型模式 - 装饰器模式
1. 模式动机一般有两种方式可以实现给一个类或对象增加行为:继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有原创 2021-12-20 11:21:00 · 75 阅读 · 0 评论 -
结构性模式 - 桥接模式
1. 模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。2. 模式定义原创 2021-12-17 18:11:43 · 96 阅读 · 0 评论 -
结构性模式 - 适配器模式
1.模式动机在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。在适配器模式中可以定义一个包装类,包装不兼容接口原创 2021-12-16 16:41:54 · 72 阅读 · 0 评论 -
创建型模式 - 建造者模式
1.模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一系列成员属性,这些成员属性中原创 2021-12-15 17:45:18 · 74 阅读 · 0 评论 -
设计模式分类说明(创建型、结构型、行为型)
1.创建型模式创建型模式:就是创建对象的模式,抽象了实例化的过程。关注的是对象的创建,创建型模式将创建对象的过程进行抽象,可以理解为将创建对象进行了封装,作为客户程序只需使用对象,不再关心创建对象过程的逻辑。社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:简单工厂模式(Simple F转载 2021-12-15 10:09:00 · 486 阅读 · 0 评论 -
创建型模式 - 抽象工厂模式
1.模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的原创 2021-12-14 10:17:41 · 79 阅读 · 0 评论 -
创建型模式 - 工厂方法模式
1.模式动机现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获得该新按钮的实例,这一特点无疑使得工厂方法模式具有超越简单工厂模式的优越性,更加符合“开闭原则”。2.模式原创 2021-12-13 16:52:10 · 66 阅读 · 0 评论 -
创建型模式 - 简单工厂模式
1.模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等),这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单工厂模式。2.模式定义简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(S原创 2021-12-11 23:22:56 · 92 阅读 · 0 评论 -
创建型模式 - 单例模式
1.模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。2.模式定义单例原创 2021-12-10 17:16:34 · 62 阅读 · 0 评论 -
设计模式 - 装饰器模式
**装饰器模式(Decorator Pattern)**允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。1.介绍1.1.作用动态地给一个对象添加一些额外的职责。1.2.解决扩展一个类经常使用继承方式来实现,由于继承为类引入静态特征,随着功能的增加,子类会膨胀。1.3.使用场景拓展一个类的功能。动态增加功能,动态销毁功能。2原创 2021-11-16 17:15:00 · 46 阅读 · 0 评论 -
设计模式六大原则
单一职责原则原则思想:一个方法只负责一件事情描述:一个方法、一个类只负责一个职责,各个职责的程序改动不影响其他程序优点:降低类和类的耦合,提高可读性,增加可维护性和可拓展性里氏替换原则原则思想:使用的基类可以在任何地方使用继承的子类,完美的替换基类描述:子类拓展父类的抽象方法,添加自己特有的功能优点:增加程序的健壮性,即使添加了子类,原有的子类不受影响依赖倒置原则原则细想:高层次的模块不应该依赖与低层次的模块,应都依赖于抽象,抽象不应该依赖于具体实现,具体实现应该依赖抽象描述:类A直接依赖类B,假如将类A改原创 2021-09-26 16:25:15 · 73 阅读 · 0 评论