设计模式(C++实现)
文章平均质量分 71
=
Dutkig
奔跑吧, 用绝望追不上的速度。
展开
-
Proactor模型
前言上一篇讲解的Reaactor是非阻塞的同步网络模式,而Proactor是异步网络模式。至于异步IO怎么理解:可以参考我的这一篇博客:Linux的五种IO模型理解之后:你就会感受到:很明显,异步 I/O 比同步 I/O 性能更好,因为异步 I/O 在「内核数据准备好」和「数据从内核空间拷贝到用户空间」这两个过程都不用等待。因此:Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」。这里的「原创 2022-04-03 23:29:18 · 1719 阅读 · 0 评论 -
Reactor模型
前言首先让我们来回顾一下select、poll和epoll是如何获取网络事件的:在获取事件时,先把我们要关心的连接传给内核,再由内核检测:若没有事件发生,线程只需阻塞在这个系统调用,而无需使用类似于线程池轮询调用read操作来判断是否有数据;如果有事件发生,内核会返回产生了事件的连接,线程就会从阻塞状态返回,然后在内核态中再处理这些连接处理这些对应的业务即可。我们也发觉,当下网络高性能的一个主要原因就是:IO多路复用的使用,但是使用过IO多路复用接口编写网络程序的人都会觉得这种开发的效率属原创 2022-04-03 22:45:18 · 1238 阅读 · 0 评论 -
结构型模式2——装饰器模式
装饰器模式(Decorator Pattern)装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构,它是作为现有的类的一个包装。以我们之前的Car为例,假设三种汽车我们需要给他们加上定速巡航或者自动刹车的功能,那么我们就需要通过实现子类的方式,重写接口,每增加一个功能,不同的车型都需要增加一个子类,这样理论上是可以完成功能的,但是代码中有太多的子类添加进来了。动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比新增加子类实现更为灵活。使用时机: 在不想添加子类的情况下扩展类原创 2022-03-20 16:43:38 · 81 阅读 · 0 评论 -
行为者模式1——观察者模式(发布-订阅)
观察者模式该模式也叫作发布-订阅模式,观察者模式主要关注的是对象的一对多的关系,也就是多个对象依赖于一个对象,当该对象的状态发生改变时,其他对象都能够收到相应的通知并自动更新。我们可以将观察者模式理解为,订阅一份报纸。首先决定订阅报纸的时候,需要去报刊告诉相关工作人员;填写自己订阅的信息,比如想要订阅什么类型的报纸(体育类、财经类等),之后留下自己的住址(这样就可以享受送报上门服务了)。示例:一组数据(数据对象)—— 曲线图(对象1)/ 柱状图(对象2)/ 圆饼图(对象3)当这组数据发生变化时,对原创 2022-03-20 19:25:44 · 664 阅读 · 0 评论 -
结构型模式3——适配器模式
适配器模式(Adapter Pattern)适配器模式是作为两个不兼容的接口之间的桥梁,增加一个适配器类使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决的问题:主要解决在软件系统中,常常要将一些“现存的对象”放到新环境中,而新环境的接口是现有对象不能满足的。我们用下面的情境来解释一下适配器模式:我们用电脑投影到投影仪上时,投影仪Project有VAG和HDMI以及Type-C等多种接口在前几年,投影仪和电脑的接口都是VAG,无疑,直接连接就可:代码实现如下:class VG原创 2022-03-20 17:26:34 · 138 阅读 · 0 评论 -
结构型模式1——代理模式
结构型模式这一类设计模式不关注对象的产生,关注的是类和对象的组合后功能的使用,是否符合场景的需求。代理模式(Proxy Pattern)代理模式是一种对象结构型模式。在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务。模型化思想:客户 —— 助理(Proxy)—— 老板代理模式体现的就是:对老板访问权限的一些控制,并不是所有的客户都可以访问老板,地位身份不够的客户就会被助理阻挡从而访问不到老板。代原创 2022-03-20 15:34:44 · 130 阅读 · 0 评论 -
创建型模式2——工厂模式(简单工厂、工厂方法、抽象工厂)
简单工厂模式动机意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。简单工厂模式结构比较简单,其核心是工厂类的设计:简单工厂模式中包含以下的几个角色:Factory(工厂角色):工厂类,它是简单工厂的核心,工厂类可以被外部直接调用,创建所需的产品对象,在工厂类中提供了静态的工厂方法factoryMe原创 2022-03-20 14:30:28 · 240 阅读 · 0 评论 -
创建型模式1——单例模式
单例模式的动机对于一个软件系统的某些类而言,我们没有必要创建多个实例化对象,就比如Windows系统的任务管理器或回收站,我们无论点击多少次都只会弹出一个窗口,因为如果弹出多个窗口,其实就是重复对象,势必会浪费系统资源,因此我们需要确保系统中某个类只有唯一一个实例,当这个实例创建成功以后,我们无法再创建同类型的其他对象,所有的操作都只能基于这个唯一的实例,为例确保对象的唯一性,我们提出了单例模式。从具体实现的角度来说:单例模式只提供私有的构造函数;类定义中含有一个该类的静态私有对象;该类提供原创 2022-02-13 20:48:03 · 342 阅读 · 0 评论