自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(267)
  • 资源 (5)
  • 收藏
  • 关注

原创 C++学习记录1

99/上接98 : C++ 在指定内存创建新对象有两种方法(1)第一种 placement new: class A; char *buff = (char*) malloc(sizeof(A)); A *pA = new(buff) A();(2)第二种显式调用构造函数 class A; A *buff = (A*) malloc(sizeof(A...

2020-02-23 20:22:10 415 1

原创 C++学习总结2

个人学习总结整理:

2020-02-23 20:17:04 296

原创 C++程序员应了解的那些事(117)~进程、线程、协程

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。4)如果处理机正在处理第i队列中某进程,又有新进程进入优先权较高的队列,则此新队列抢占正在运行的处理机,并把正在运行的进程放在第i队列的队尾。一个进程可由多个线程的执行单元组成,每个线程都运行在同一进程的上下文中,共享同样的代码和全局数据。在优先权越高的队列中,为每个进程所规定的执行时间片就越小。

2023-08-22 22:12:54 545

原创 设计模式简述

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。

2023-06-01 22:26:44 789

原创 程杰“大话设计模式”中的设计原则

依赖倒置其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是 终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如果你能够想到多余一个的动机去改变一个类,那么这类就具有多于一个的职责,这时就应该考虑类的职责分离。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。迪米特法则的根本思想是强调类之间的松耦合。

2023-06-01 19:20:50 816

原创 设计模式之~中介者模式

Colleague叫做抽象同事类,而ConcreteColleague是具体同事类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象,Mediator是抽象中介者,定义了同时对象到中介者对象的接口,ConcreteMediator是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事发出命令。中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

2023-06-01 19:11:32 808

原创 设计模式之~解释器模式

抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,抽象表示把js代码进行了结构化的转化,转化为一种数据结构。抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。终结符表达式,实现与文法中的终结符相关联的解释操作。

2023-06-01 19:10:03 1546

原创 设计模式之~访问者模式

很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。反之,如果这样的系统的数据结构对象易于变化,经常要有新的数据对象增加进来,就不适合使用访问者模式。(访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式表示一个作用于某对象结构中的各元素的操作。ObjectStructure类:能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。

2023-06-01 08:54:19 1053

原创 设计模式之~迭代器模式

迭代器(Iterator)模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原则,所有我们要尽可能地分离这些职责,用不同的类取承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。

2023-06-01 08:52:27 909

原创 设计模式之~策略模式

这本身并没有解除客户端需要选择判断的压力,而策略模式与简单工厂模式结合后,选择具体实现的职责也可以由Context来承担,这就最大化地减轻了客户端的职责。策略模式就是用来封装算法的,但在实践中,我们发现可以用来封装几乎任何类型的规则,只要在分享过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。多个类只有算法或行为上稍有不同的场景。

2023-06-01 08:50:46 822

原创 设计模式之~备忘录模式

Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。有时一些对象的内部信息必须保存在对象以外的地方,但是必须要由对象自己读取,这时使用备忘录可以把复杂的对象内部信息对其他的对象屏蔽起来。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。

2023-06-01 08:49:38 947

原创 设计模式之~状态模式

将特定的状态相关的行为都放入一个独立对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。另外如果业务需求某项业务有多个状态,通常都是一些枚举常量,状态的变化都是依靠大量的多分支判断语句来实现,此时应该考虑将每一种业务状态定义为一个State的子类。这个时候“根据状态决定行为”的状态模式的引入也许是个不错的主意。对于支持状态切换的状态类违反了开闭原则,因为一旦状态修改或者中间要新增状态,则需要修改对应的源代码,否则会出现状态切换错误。

2023-06-01 08:46:08 679

原创 设计模式之~职责链模式

接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。责任链模式主要是解耦了请求与处理,用户只需要将请求发送到链上即可,无需关心请求的具体内容和处理细节,请求会自动进行传递直至有节点进行处理。当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它,这样做的好处是请求者不用管哪个对象来处理,反正该请求会被处理就对了。允许出现某一个具体处理者对象在承担了请求的一部分责任后又将剩余的责任传给下家的情况,且一个请求可以最终不被任何接收端对象所接收。

2023-06-01 08:44:43 1115

原创 设计模式之~观察者模式

Observer类,抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。但委托也是由前提的,那就是委托对象所搭载的所有方法必须具有相同的原形和形式,也就是拥有相同的参数列表和返回值类型。尽管已经用了依赖倒转原则,但是‘抽象通知者’还是依赖‘抽象观察者’,也就是说,万一没有了抽象观察者这样的接口,通知的功能就完不成了。让耦合的双方都依赖于抽象,而不是依赖于具体。“看股票观察者”类和“看NBA观察者”类,去掉了父类“抽象观察类”,所以补上一些代码,并将“更新”方法名改为各自适合的方法名。

2023-05-31 08:37:46 1128

原创 设计模式之~组合模式

这样做不会出现Leaf做无用功的问题,不过由于不够透明,所以树叶和树枝类将不具有相同的接口,客户端的调用需要做相应的判断,带来了不便。定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去,客户端代码中,任何用到基本对象的地方都可以使用组合对象。以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

2023-05-31 08:37:31 817

原创 设计模式之~命令模式

命令模式会通过在行为请求者和执行者之间引入一个抽象接口来将请求者和执行者进行解耦,这样如果需要修改行为时,只需要增加对应行为的命令就可以了,完全不需要修改请求者的源代码。在我们的软件开发系统中,行为请求者和真正的执行者通常都是一种紧耦合关系,但是这种情况下,当我们需要修改行为时,如需要撤销或者重做时,只能修改请求者的源代码,命令模式的结果其实就是接收方的执行结果,但是为了以命令的形式进行架构、解耦请求与实现,引入额外类型结构(引入请求方与抽象命令接口)。第二,在需要的请情况下,可以较容易地将命令记入日志;

2023-05-31 08:37:14 1835

原创 设计模式之~装饰模式

当系统需要新功能时候,是向旧的类中添加新的代码,这些新的代码通常装饰了原有类的核心职责或主要行为,问题是在主类中加入类新的字段、方法和逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。把类的装饰功能从类中搬移去除,这样可以简化原有的类。简而言之,装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。动态地给一个对象添加一些额外的职能,就增加功能来说,装饰模式比生成子类更为灵活。

2023-05-31 08:36:15 260

原创 设计模式之~享元模式

也就是说,享元模式Flyweight执行时所需要的状态是有内部的也可能有外部的,内部状态存储于ConcreteFlyweigt对象之中,而外部对象则应该考虑由客户端对象存储或计算,当调用Flyweight对象的操作时,将该状态传递给它。还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。享元模式的主要目的: 是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。需要关注线程安全性问题。

2023-05-31 08:36:01 575

原创 设计模式之~模板方法模式

每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。(当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,实现了反向控制 ,符合“开闭原则。

2023-05-31 08:35:40 1327

原创 设计模式之~外观模式

为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。有些方法是对系统外的,有些方法是系统内部使用的。比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。

2023-05-30 21:27:45 3407

原创 设计模式之~适配器模式

比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。在软件开发中,当系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。灵活性:某一天,突然不想要适配器,没问题,删除掉这个适配器就可以了,其他的代码都不用修改,基本上就类似一个灵活的构件,想用就用,不想就卸载。更好的扩展性:在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。对象适配器模式:本节主要讲对象适配器模式。

2023-05-30 21:25:29 2965

原创 设计模式之~桥接模式

这种依赖关系限制了灵活性并最终限制了复用性。桥接模式就是将抽象部分与它的实现部分分离,其实就是实现系统可能有多角度分类,每一种分类都可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。桥接模式的主要目的是通过组合的方式建立两个类之间的关系,而并不通过继承来实现,桥接模式的核心在于解耦抽象和实现。桥接模式的主要目的是通过组合的方式建立两个类之间的关系,而并不通过继承来实现,桥接模式的核心在于解耦抽象和实现。合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

2023-05-30 21:23:49 2155

原创 设计模式之~代码模式

比如打开一个很大的HTML网页时,里面可能有很多的文字和图片,但你还是可以很快打开它,此时你所看到的是所有的文字,但图片却是一张一张地下载后才能看到。那些未打开的图片框,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;或在访问一个实际对象前,检查算法已经锁定它,以确保其他对象不能改变它。代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。,是指当调用真实的对象时,代理处理另外一些事。

2023-05-30 21:21:21 139

原创 设计模式之~原型模式

因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果字段是值类型的,则对该字段执行逐位赋值,如果字段是引用类型,则复制引用但不复制引用的对象;深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

2023-05-30 21:10:55 1553

原创 设计模式之~建造者模式(生成器模式)

简而言之,就是当我们需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用建造者模式。director(指挥者)是构建一个使用builder接口的对象,主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式的好处就是使得建造代码与表示代码分离,由于建造着隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。如内部变化复杂,会有很多的建造类。

2023-05-30 21:10:51 61

原创 设计模式之~工厂系列(简单工厂、工厂方法、抽象工厂)

由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口, 因此只需改变具体工厂的实例, 就可以在某种程度上改变整个软件系统的行为。适用场景:简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。都集中封装了对象的创建,使得要更换对象时,不需要做大的改动就可以实现,降低了客户程序与产品对象的耦合。封装了对象的创建,使得要更换对象时,不需要做大的改动就可实现,降低了客户程序与产品对象的耦合。

2023-05-30 21:07:57 1785

原创 设计模式之~单例模式

枚举类实现单例模式是 effective java 作者极力推荐的单例实现模式,因为枚举类型是线程安全的,并且只会装载一次,设计者充分的利用了枚举的这个特性来实现单例模式。在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。不能实现懒加载,造成空间浪费,如果一个类比较大,我们在初始化的时就加载了这个类,但是我们长时间没有使用这个类,这就导致了内存空间的浪费。不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。

2023-05-30 21:04:48 1913

原创 程序员学会:UML

合成关系用实心的菱形加实线箭头表示。图中的数字‘1’,‘2’称为基数。表示这一端的类可以有几个实例。如果一个类可能有无数个实例,则就用‘n’来表示。符号:“+”表示public,“-”表示private,“#”表示protected。接口图第二种表示方法,俗称“棒棒糖”法,比如图中唐老鸭实现讲人话的接口。实现接口用空心三角形加虚线表示。继承由空心三角箭头加实线表示,由子类指向父类。当一个类“知道”另外一个类时,可以使用关联。第三层是类的操作(方法,类的成员函数)。聚合关系用空心菱形加实线箭头来表示。

2023-05-30 20:54:31 88

原创 设计模式(简介)

2023-05-30 08:50:45 73

原创 C++程序员应了解的那些事(116)~单引号 VS 双引号

单引号 VS 双引号

2023-04-09 14:36:19 2618 1

原创 C++程序员应了解的那些事(115)~类模板的分离式编译(类模板究竟要不要接口与实现分离)

C++类模板声明与实现分离

2023-04-03 22:50:21 352

原创 C++程序员应了解的那些事(114)~Effective C++ :改善程序与设计的55个具体做法

参考博客:

2023-03-25 16:21:57 1118

原创 哈希算法——murmurhash一致性哈希算法

哈希算法

2022-12-22 20:44:46 1126

原创 程序员应了解的那些事(112)~原子操作

原子操作

2022-12-22 19:54:15 754 1

原创 yum命令轻松升级到高版本gcc

gcc 安装; devtoolset

2022-09-25 23:39:30 10441

原创 程序员应了解的那些事(111)~进程、线程及堆栈关系

进程、线程及堆栈关系

2022-09-03 23:15:00 2787 2

原创 结构化编程(SP,structured programming)

结构化程序设计

2022-09-03 14:48:33 4204

原创 5G核心网之SBA架构(面向服务)

5G核心网SBA架构

2022-09-02 23:10:23 4790

原创 O-RAN:致力于ICDT融合,打造开放与智能的无线接入网

O-RAN:致力于ICDT融合

2022-09-02 22:46:20 1319

原创 O-RAN架构与3GPP RAN架构的区别

O-RAN架构

2022-09-02 10:15:16 517

预加重与去加重.doc

预加重(Pre-emphasis):发送端对输入信号高频分量的提升。 去加重(De-emphasis) :解调后对高频分量的压低。

2020-07-12

XX厂宽带集群解决方案.pdf

行业专网技术的发展  随着对应急抢险的及时性和准确性要求越来越高, 对指挥决策系统来说,迫切需要包括视频、语 音、数据等多媒体并发通信手段,做到决策正确,指挥高效。  应急系统宽带化、多媒体化的需求越来越强烈,将成为下一代宽带应急系统的发展方向。

2020-07-12

实验室硬件设计开发导入.pptx

实验室硬件平台概述 PCB基础概念 Altium Designer 软件使用基础 板子组成结构与功能介绍 电路板调试基本思路与方法 焊接台规则

2020-07-12

数字滤波器,数字滤波器原理是什么.docx

在信号处理领域中,对于信号处理的实时性、快速性的要求越来越高。而在许多信息处理过程中,如对信号的过滤、检测、预测等,都要广泛地用到滤波器。其中数字滤波器具有稳定性高、精度高、设计灵活、实现方便等许多突出的优点,避免了模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题,因而随着数字技术的发展,用数字技术实现滤波器的功能越来越受到人们的注意和广泛的应用。

2020-07-12

菊厂C++语言安全编程规范最新版.docx

C&C++语言安全编程指导规范: 改进模块中函数的结构, 降低函数间的耦合度, 并提高函数的独立性以及代码可读性、效率和可维护性。优化函数结构时, 要遵守的原则等;指针变量、表示资源描述符的变量、BOOL变量声明、必须赋予初值等。

2020-07-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除