
设计模式
IT1995
每周个人笔记分享,欢迎广大网友查阅!
展开
-
面向对象程序设计要考虑的7个原则
面向对象程序设计要考虑7个原则,在此记录下,方便以后自己翻阅。单一职责原则:设计目的单一的类;开放封闭原则:对扩展开发,对修改封闭;李氏替换原则:子类可以替换父类;依赖倒置原则:要依赖于抽象,不依赖于具体,面向接口的编程;接口隔离原则:使用多个专用的接口比使用单一的接口要好;组合重用原则:尽可能使用组合,而非继承;迪米特原则:一个对象尽可能少的了解其他对象。...原创 2020-09-15 08:45:24 · 1944 阅读 · 0 评论 -
Qt笔记-多线程检索数据库(单例多重锁,QtConcurrent::blockingMapped)
这里主要是个事例,并不涉及业务逻辑处理。在此记录下。程序运行截图如下:这里有下面这个类BigDataTest对数据进行的类。MySQLInstance采用单例双重锁模式对数据库进行操作。源码如下:BigDataTest.h#ifndef CONCURRENT_H#define CONCURRENT_H#include <QObject>#include <QList>class BigDataTest : public QObj..原创 2020-09-15 08:40:49 · 1307 阅读 · 0 评论 -
C++设计模式-观察者模式
目录基本概念代码与实例基本概念观察者模式又叫做发布-订阅模式;观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。对应的UML如下(此图来源于 大话设计模式):代码与实例下面给出C++的实例,程序运行截图如下:本人目前水平对这个...原创 2019-06-27 09:09:55 · 8147 阅读 · 4 评论 -
C++设计模式-抽象工厂模式
目录基本概念代码与实例基本概念抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,从而无需指定他们具体的类。抽象工厂的好处: 1. 易于交换产品系列,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置; ...原创 2019-07-04 14:24:55 · 5588 阅读 · 0 评论 -
C++设计模式-适配器模式
目录基本概念代码与实例基本概念适配器(Adapter)模式:将一个类的接口转换为客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。当系统的数据和行为都正常,但接口不负荷时,可以考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用的环境要...原创 2019-07-13 17:14:10 · 6221 阅读 · 0 评论 -
C++设计模式-状态模式
目录基本概念代码与实例基本概念状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来就像是改变了其类;状态模式的好处: 1. 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来; 2. 状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互的依赖;当一个对象的行为取决与他...原创 2019-07-05 15:41:04 · 10348 阅读 · 2 评论 -
C++设计模式-备忘录模式
目录基本概念代码与实例基本概念备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。结构图如下(此图来源于大话设计模式):Originator为发起者Memento为备忘录Caretaker为管理者Memento模式比较适用于功能复杂的,但需要维护...原创 2019-07-16 16:25:24 · 4368 阅读 · 0 评论 -
C++设计模式-迭代器模式
目录基本概念代码与实例基本概念迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你需要一个聚集对象,而且不管这些对象,而不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式;当需要对聚集有多种方式遍历的时候,可以考虑用迭代器模式。UML图如下(此图来源于大话设计模式)代码与实例...原创 2019-08-02 15:28:37 · 4810 阅读 · 2 评论 -
C++设计模式-单例模式(双重锁定)
目录基本概念代码与实例基本概念单例模式以前都出过一个了,再次只粗略讲下!单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点其中UML图如下(来自于大话设计模式)代码与实例下面是最基础的单例模式!运行截图如下:代码如下:Head.h#ifndef HEAD_H#define HEAD_H#inc...原创 2019-08-03 14:08:39 · 9030 阅读 · 5 评论 -
C++设计模式-组合模式
目录基本概念代码与实例基本概念个人感觉Qt的对象树就是运用了这种设计模式!!!当然,只是个人感觉,本人并没有研究Qt的源码组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。何时使用:需求中提现部分和整体的层次结构,开发者希望用户忽略组合对象与单个对象的不同,统一使用...原创 2019-08-02 10:19:26 · 7254 阅读 · 2 评论 -
C++设计模式-桥接模式
目录基本概念代码与实例基本概念组合/聚合的好处:优先使用对象的组合/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类的继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。桥接模式(Bridge),将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式的核心意图就是把这些实现对立出来,让它们各自变化。这就使得每一种实现的变化不会...原创 2019-08-08 17:07:06 · 5167 阅读 · 0 评论 -
C++设计模式-命令模式
目录基本概念代码与实例基本概念命令模式(Command),将一个请求封装为对象,从而使你看用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。命令模式的作用: 1. 能比较容易的设计一个命令队列; 2. 在需要的情况下,可以比较容易地将命令记入日志; 3. 允许接收请求...原创 2019-08-09 13:46:49 · 5208 阅读 · 0 评论 -
C++设计模式-中介者模式
目录基本概念代码与实例基本概念中介者模式(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系。下面是UML图此图来源于大话设计模式代码与实例程序运行截图如下:源码如下:Head.h#ifndef HEAD_H#define HEAD...原创 2019-08-14 15:11:28 · 5011 阅读 · 3 评论 -
C++设计模式-职责链模式
目录基本概念代码与实例在哪种地方使用基本概念职责链模式(Chain of Responsibility):时多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链,并沿着这条链条传递该请求,直到有一个对象处理它为止。这里发出这个请求的客户端并不知道这当中的哪个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况...原创 2019-08-10 13:31:45 · 4271 阅读 · 1 评论 -
C++设计模式-享元模式
目录基本概念代码与实例基本概念享元模式(Flyweight):运用共享技术有效的支持大量细粒度的对象。UML图如下(此图来源于大话设计模式)享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能受大幅度的减少需要实例化的数量。如果能把哪些参数移动到类实例外...原创 2019-08-15 09:58:54 · 5053 阅读 · 1 评论 -
C++设计模式-解释器模式
目录基本概念代码与实例基本概念解释器模式(interpreter):给定一个语言,定义他的文法的一种表示,并定义一个解释器,这个解释器应该使用该表示来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各种实例表述为一个简单语言中的句子。这样的就可以构建成一个解释器,该解释器通过解释这些句子来解决问题。UML图如下(此图来源于大话设...原创 2019-08-17 12:54:59 · 4902 阅读 · 0 评论 -
C++设计模式-访问者模式
目录基本概念代码与实例基本概念访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。UML图如下(此图来源于大话设计模式)访问者模式适用于数据结构相对稳定的系统。访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关行为集中...原创 2019-08-17 16:15:08 · 5455 阅读 · 0 评论 -
C++设计模式-建造者模式
目录基本概念代码与实例基本概念建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们装配方式时适用的模式。下面给出一个UML实例:代码与实例程序运行截图如下:源码如下:Head.h#include ...原创 2019-06-25 23:34:02 · 5345 阅读 · 0 评论 -
C++设计模式-采用装饰模式用户和管理员加载不同的模块(Qt框架实现)
目录基本概念例子与实例基本概念这里在本https://blog.youkuaiyun.com/qq78442761/article/details/91379724例子的基本上,进行扩充与修改。同样,结构图如下例子与实例当加载如下信息时:界面如下:修改成如下:界面运行如下:程序结构如下:这里只是简单处理,所有的模块...原创 2019-06-11 08:44:32 · 4711 阅读 · 3 评论 -
C++设计模式-装饰模式
目录基本概念代码和实例基本概念装饰模式是为已有功能动态地添加更多功能的一种方式。当系统需要新功能的时候,是向旧系统的类中添加新代码。这些新代码通常装饰了原有类的核心职责或主要行为。装饰模式的优点: 1. 把类中的装饰功能从类中搬移出去,这样可以简化原有的类; 2. 有效地把类的核心职责和装饰功能区分开了。而且可...原创 2019-06-10 15:45:50 · 5186 阅读 · 0 评论 -
设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)
简单工厂:通过接口的方式,把实现和变化隔离接口编程:是一种特殊的抽象类,是一个纯虚类。通常接口来定义类的外部,就相当于一份契约,其实就是根据外部应用需要的功能,约定了实现类应该要实现的功能。软件开发中永恒的主题是“变化”,接口的最重要的一个设计语义就是封装变化,也就是隔离变化(内部实现对外部是透明的)。从软件的整体结构上来看,只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更加灵活,...原创 2018-06-27 09:14:07 · 4050 阅读 · 1 评论 -
C++工作笔记-设计普通类的格式,实现简单工厂中接口的定义
运行截图如下:(然并卵)代码如下:#include <iostream>#include <string>using namespace std;class Api{public: virtual void print(string data) = 0;protected: Api(){ //屏蔽构造函数,提醒接口的定义 cout << "A...原创 2018-06-27 08:51:45 · 3892 阅读 · 1 评论 -
C++工作笔记-简单工厂模式基础(用静态类传入函数指针,再进行调用)(仿大佬代码)
代码如下:#include <iostream>using namespace std;typedef void(*LPFUNCTION)(int data);void registerConfigParser(LPFUNCTION lpfn){ lpfn(10);}class MyClass{public: MyClass(LPFUNCTION lpfn){...原创 2018-07-16 16:39:34 · 4233 阅读 · 1 评论 -
C++设计模式-使用Qt框架采用简单工厂模式实现商城打折满减案例
程序运行截图如下: 理论:面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。注意:这个模式值解决了对象创建的问题,工厂本身包含了所有收费方式,每一次维护或扩展收费方式都要改动动词,导致代码要重写编译部署,这是个方法,但不是最好的方法! 源码如下:cash.h#ifndef CASH_H#def...原创 2018-11-22 10:46:44 · 4737 阅读 · 0 评论 -
C++设计模式-面向对象程序设计要点以及封装性特点
目录 1.面向对象程序设计要点2.单使用封装性的例子 1.面向对象程序设计要点面向对象程序设计要注意什么:注意3点:1.可维护性;2.可扩展性;3.可复用性;4.灵活性好;注意:要尽可能的避免重复;要求业务逻辑与界面分离,让他们的耦合性降低。只有这样才能达到容易维护和扩展;1.通过封装、继承、多态把程序的耦合度降低;2.面向对象要结合设计模式使用,从而...原创 2018-11-17 11:39:31 · 4405 阅读 · 0 评论 -
C++设计模式-继承与多态影响耦合性(最基础的简单工厂模式小实例)
继承与多态影响耦合性(最基础的简单工厂模式小实例)原理:通过继承和虚函数的方式修改某个子类对应函数的功能;通过简单工厂模式到底实例化谁;如果要增加复杂的运算只有增加响应的子类,以及工厂的分支即可; 程序运行截图如下: 目录结构如下: 源码如下:OperationFactory.h#pragma once#include "Operation...原创 2018-11-17 23:39:39 · 4319 阅读 · 0 评论 -
C++设计模式-策略模式(Strategy)基本轮廓
策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。策略模式和工厂模式的不同之处:工厂来生成算法对象,这没有错,但算法只是一种策略,最重要的是这些算法是随时间都可能互相替换的,这就是变化点,而封装变化就是面向对...原创 2018-11-23 09:31:11 · 5772 阅读 · 0 评论 -
C++设计模式-使用Qt框架模拟策略模式(Strategy)商场促销
UML图如下: 如果单使用策略模式,会出现这个问题:客户端判断使用哪个算法! 这里可以用简单工厂与策略模式结合! 运行截图如下: 源码如下:cash.h#ifndef CASH_H#define CASH_H#include <QString>class CashSuper{public: virtual do...原创 2018-11-24 21:45:32 · 4377 阅读 · 0 评论 -
C++设计模式-使用Qt框架模拟策略模式(Strategy)+简单工厂实现商场促销
商城促销:1.简单工厂模式:客户端认识两个类,CashSuper与CashFactory2.简单工厂模式 + 策略模式:客户端只要认识CashContext就可以了,更加降低耦合性策略模式解析:策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,值是实现不同,它可以以相同的方式调用所以的算法,减少了各种算法类与使用算法类之间的耦合[DPE]。策略模式的St...原创 2018-11-25 11:53:47 · 4489 阅读 · 0 评论 -
C++设计模式-单例模式理论与实例
目录 单例模式基本概念 举个栗子单例模式基本概念大多数试试,一件产品简单,职责单一就是最好的选择;就一个类而言,应该仅有一个引起他变化的原因【ASD】;单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因;如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计...原创 2018-12-07 08:50:29 · 4210 阅读 · 3 评论 -
C++设计模式-开放-封闭原则基本概念与实例
目录 基本概念举一个例子基本概念在如那就的设计模式中,不能修改,但可以扩展的实现是一条十分重要的原则,它是开放-封闭原则(The Open-Clossed Principle,简称OCP)或开-关闭原则;开放-封闭原则,软件实体(类、模块、函数等)应该可以扩展,但不能修改。【ASD】对于扩展是开放的(Open for extension),对于更改是封闭的(Closed...原创 2018-12-09 21:35:20 · 5333 阅读 · 0 评论 -
C++仿Java反射机中字符串创建类的思想,初步实现
目录理论实例理论因为上午对Java反射机制有了跟进一步认识,这里用C++模仿下,他的思想,并且简单实现了下,这里只是模仿他的思想!这个思想为:如果有一个class A,可以使用new A()来创建对象,但如果要使用字符串"A"来创建class A的对象,在Java中通过java.lang.class中的Class可以把一个类当成一个变量,然后通过字符串,去...原创 2019-02-28 16:48:42 · 4211 阅读 · 0 评论 -
C++设计模式-代理模式
目录基本概念代码及演示基本概念代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。UML图如下:以本人目前(2019-06-12)个人的水平对代理的认识:真实对象可以用于存储数据,并做一些基本的逻辑。代理可以进行复制的逻辑。代码及演示程序运行截图如下:结构如下:Head.h#ifndef H...原创 2019-06-12 18:41:33 · 4362 阅读 · 1 评论 -
C++设计模式-工厂模式
目录基本概念代码及实例基本概念工厂方法模式(Factory Method):定义一个用于创建对象的接口,让字类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;简单工厂模式的最大优点在用户工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖。工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实...原创 2019-06-13 17:22:34 · 6776 阅读 · 0 评论 -
C++设计模式-外观模式
目录基本概念代码与实例基本概念外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。增加外观Facade可以提供一个简单的接口,减少它们之间的依赖;为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade...原创 2019-06-19 10:07:56 · 4926 阅读 · 1 评论 -
C++设计模式-模板方法模式
目录基本概念例子和实例基本概念模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。结构图如下(此图来自大话设计模式):模板方法模式是通过把不变行为搬移到超类中,去除子类中的重复代码来提现他的优势。模板方法模式提供了一个很好的代码复用。当不变和可变的行为在方法...原创 2019-06-14 17:37:32 · 5746 阅读 · 0 评论 -
设计模式工作笔记-UML和设计模式导论
UML类图:类与类图:1、类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称;2、在系统中,每个类具有一定的职责(要完成什么样的功能),一个类可以有多个职责,设计得好的类只有一个职责,将类的职责分解成为类的属性和操作。3、类的属性及类的数据职责,类的操作即类的行为职责。类之间的关系:关联关系(一个类和另外一个类的关联)1.关联关系(Association)是...原创 2018-06-24 23:02:02 · 3907 阅读 · 1 评论