自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 装饰者设计模式

1、定义动态地给一个对象增加一些额外的职责。就增加功能而言,装饰器模式比生产子类更为灵活。—— 《设计模式》GoF2、代码实现代码背景:普通员工有销售奖金,累计奖金,部门经理除此之外还有团队奖金;后面可能会添加环比增长奖金,同时可能针对不同的职位产生不同的奖金组合;#include <iostream>using namespace std;//封装被计算奖金的人员信息class Context {public: bool isMgr; // User us

2021-12-14 21:47:24 230

原创 责任链设计模式

1、定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 ——《设计模式》GoF2、代码实现代码背景:请求流程,1 天内需要主程序批准,3 天内需要项目经理批准,3 天以上需要老板批准;#include <string>//上下文类用来封装:请假信息class Context {public: std::string name; int day;};//抽象处理类

2021-12-14 21:12:09 916

原创 工厂设计模式和抽象工厂设计模式

工厂设计模式1、定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。 ——《设计模式》GoF2、代码实现代码背景:实现一个导出数据的接口,让客户选择数据的导出方式#include <string>// 实现导出数据的接口, 导出数据的格式包含 xml,json,文本格式txt 后面可能扩展excel格式csvclass IExport {public: virtual bool Export(const

2021-12-14 18:42:25 292

原创 单例设计模式

1、定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》GoF单例生命周期:从创建到进程结束一直存在版本一class Singleton { public: static Singleton * GetInstance() { if (_instance == nullptr) { _instance = new Singleton(); //这里是new出来的,内存是在堆区上,由于析构函数私有化了,无法释放该

2021-12-14 17:06:20 1040

原创 策略设计模式

1、定义定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户程序而变化。 ——《设计模式》 GoF2、代码实现代码背景:某商场每个节假日有固定促销活动,现在国庆到了,为了加大促销力度,现提升国庆节促销活动规格(节日是变化的,每年到一个节日就需要调整今年的促销策略,所以每个节日的促销策略是经常要变的)class Context { //上下文:在开发中根据上下文作出不同的策略调整 //...};//促销策略父类class ProState

2021-12-14 11:49:09 338

原创 观察者设计模式

1、定义定义对象间的一种一对多(变化)的依赖关系,以便当**一个对象(Subject)**的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。——《 设计模式》 GoF2、代码实现代码背景:气象站发布气象资料给数据中心,数据中心经过处理,将气象信息更新到两个不同的显示终端(A 和B)#include <vector>//定义一个显示接口,用于规范显示对象,便于扩展class IDisplay {public: virtual void Show(float t

2021-12-14 11:15:38 516

原创 模板方法设计模式

1、定义定义一个操作中的算法的骨架 ,而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 ——《 设计模式》 GoF算法的骨架:固定的流程延迟到子类中:使子类也具有对应的流程,也就是继承下来重定义该算法的某些特定步骤:重写虚函数2、代码实现代码背景:某个品牌动物园,有一套固定的表演流程,但是其中有若干个表演子流程可创新替换,以尝试迭代更新表演流程#include <iostream>using nam

2021-12-14 10:15:32 896

原创 设计模式原则

1、设计模式概述简单来说设计模式就是应对固定场景的写代码”套路“。核心是解耦合,让代码后期维护时变得更加容易,有一个形象的例子描述设计模式:一个房间里有一只爱动的猫,如何保持房间的整洁?答案是把猫关进笼子里,也就是所说的解耦合,将变化点隔离。如何学习设计模式?分析业务需求,找到变化点和稳定点,将变化点隔离出来先满足设计模式原则,再慢慢迭代出设计模式2、设计模式原则1)依赖倒置高层模块不应该依赖低层模块,两者都应该依赖抽象(高低层模块变动时,双方不影响)具体实现应该依赖于抽象(用接

2021-12-13 21:40:05 286

原创 布隆过滤器—Bloom Filter

1、布隆过滤器概述1)布隆过滤器的使用场景:比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中)在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上在网络爬虫里,一个网址是否被访问过以上这些情况,最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新 元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hash table)来存储的。它的好处是快速准确,缺点是费存储空间。当集合比较小时,这个问题不显著,但是当集合巨大时,哈希表存储效率

2021-12-10 11:29:39 920

原创 Hash表查找与分布式一致性Hash

1、背景如何从海量数据中查询某个字符串是否存在?如果使用有序数据采用从前向后的对比查找,时间复杂度为O(n),如果使用折半查找(平衡二叉树),时间复杂度为O(log2nlog_2{n}log2​n)。对于海量数据查找,使用Hash表查询会更高效。2、Hash表概述Hash表又称散列表,基本思路是:设要存储的元素个数是n,设置一个长度为m(m≥n)的连续内存单元(数组)。找到一个哈希函数并计算要存储的值,得到一个哈希值,使得这个哈希值与内存单元地址存在映射关系(也可以与数据下标存在映射关系)。通过哈希

2021-12-09 15:48:57 326

原创 B树和B+树

B树1、B树定义AVL树和红黑树都是用作内查找的数据结构,即被查询的数据集合不大,可以放在内存中;B树和B+树是用作外查询的数据结构,其数据是存储在外村中的。B树中所有节点的孩子节点的最大值称为B树的阶,通常用m表示。(节点最大分支数就是阶数)从查找效率来说,要求m≥3B数的要求如下: 树中每个节点最多有m颗子树 若根节点不是叶子节点,则根节点至少有两个子树(分支) 除根节点外,所有非叶子结点最少有[m/2]颗子树 关键字数量n规定:[m/2]-1≤n≤m

2021-12-07 22:19:39 440

原创 红黑树—rbtree

1、红黑树简介红黑树(Red Black Tree)是一种重要的数据结构,大多数自平衡BST(self-balancing BST) 库函数都是用红黑树实现的,比如C++中的map 和 set (或者 Java 中的 TreeSet 和 TreeMap)。红黑树也用于实现 Linux 操作系统的 CPU 调度。完全公平调度(Completely Fair Scheduler)使用的就是红黑树2、红黑树与AVL树(二叉平衡树)的比较: AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机

2021-12-06 21:01:03 476

空空如也

空空如也

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

TA关注的人

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