- 博客(15)
- 资源 (2)
- 收藏
- 关注
原创 设计模式:装饰器模式
分类:结构型模式特点:装饰器模式可以在不改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。模式结构:UML图:略(后补)组成Component(抽象构件):给出一个抽象接口,以规范准备接收附加责任的对象。ConcreteComponent(具体构件):定义一个将要接收附加责任的类。Decorator(抽象装饰类):持...
2019-08-30 16:04:22 162
原创 设计模式:适配器模式
分类:结构型。该模式又分为对象适配器(对象结构型)和类适配器(类结构型),对象适配器使用对象组合,类适配器使用多继承,对象适配器耦合度较低,因此使用更多。特点:适配器模式本质上是一种补救模式,将一个类的接口转换成客户希望的另外一个接口,从而使原本由于接口不兼容而不能一起工作的类可以一起工作(对不相干的两个类建立关联)。模式结构对象适配器模式UML图(略,后补)类适配器模式U...
2019-08-28 18:34:22 122
原创 设计模式:外观(fasade)模式
所属类型:结构型特点:外观模式下,外观为子系统中的一组接口提供了一个统一的高层接口,该接口使得子系统更加容易使用。模式结构:UML图:略(后补)Facade(外观):模式的核心,被 Client 调用,它将所有从 Client 发来的请求委派到相应的子系统去,让子系统处理。SubSystem(子系统):可以同时有一个或者多个子系统,子系统可以是一个单独的类或类的集合。使用场景:...
2019-08-27 21:25:01 272
原创 设计模式:原型模式
特点:允许一个对象再创建另外一个可定制的对象,而无需知道任何创建的细节。个人认为该模式的本质是对拷贝构造函数的进一步封装,封装成一个clone函数,在外面可直接调用clone函数而无需关心内部拷贝细节。模式结构:Prototype(抽象原型):定义了克隆自身的接口。ConcretePrototype(具体原型):被复制的对象,需要实现 Prototype 定义的接口。UML图:略(...
2019-08-27 10:40:01 131
原创 设计模式:建造者模式
建造者模式核心:旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。模式结构:Product(产品):表示被构造的复杂对象。Builder(抽象建造者):为创建一个产品对象的各个部件指定抽象接口。ConcreteBuilder(具体建造者):实现 Builder 的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。Dire...
2019-08-26 20:47:57 115
原创 python中星号(*和**)
引:在c++中通过声明参数模板可以实现不定长参数的函数,在python中有更加方便的方式实现函数形参不定长的,那就是通过*号来实现。具体地可以分为两类,下面分别总结阐述。本文主要参考和代码测试了该博文第一类:在函数定义时使用 * 和 ** 。在函数定义时形参中 使用 * 和 **则表示 可以输入不确定具体参数个数的参数。通过 * 声明的参数在调用是可以传入0~n个参数,且不管传入的参数为...
2019-08-24 14:13:38 535
原创 设计模式:单例模式
定义:单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。代码中的三个要点:单例类的构造函数为私有;提供一个自身的静态私有成员变量;提供一个公有的静态工厂方法。下面以单例模式中的懒汉模式(推迟创建对象)为例,说明单例模式://Singleton1.h#ifndef ...
2019-08-19 20:32:15 119
原创 设计模式:生产者-消费者模式
引:生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深。所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区中去...
2019-08-17 21:35:25 559
原创 踩过的c++的一些坑
承接函数返回结果的句柄不要使用二级指针,更准确地说不要通过回传数据地址的方式承接函数返回结果,因为函数结束后,相关的资源(包括相关数据)都会回收,此时承接函数返回的地址,此时的地址是释放后的、无效的。正确的做法是直接承接函数的返回值(数值)或通过拷贝内存的方式进行返回。以下是遇到的坑:算法库是通过初始化出一块内存(创建一个环境句柄),将环境句柄在不同调用需求中使用。该句柄包含了程序各功能类(...
2019-08-17 16:34:18 156
原创 c++11_多线程_4:condition_variable
引:由上一篇mutex的介绍,基本可知通过设置mutex锁可以解决不同线程修改共享变量的线程安全问题。然而,有些时候并不止要求不同线程间访存的数据安全,而且需要各线程按照某一顺序进行访存或执行,这种情况就需要通过设置condition variable(条件变量)实现。条件变量的一般用法是:线程 A 等待某个条件并挂起,直到线程 B 设置了这个条件,并通知条件变量,然后线程 A 被唤醒。经典的 ...
2019-08-14 16:47:16 295
原创 c++11_多线程_3:mutex
mutex的作用:保证线程安全。即多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。接下面介绍几种加锁形式。第一种形式:lock/unlock形式(直接对共享的资源加锁和解锁,注意:加和解的必须是同一把互斥锁,在加锁和解锁之间的部分均可保证数据一致性),这种形式的弊端是如果在解锁前程序出现异常,那么互斥锁将不能正常解开,程序陷入死循环。#inc...
2019-08-12 21:11:53 262
原创 c++11_多线程_2:线程的join与detach(番外:适配器)
线程的join与detachjoin与detach理论上的区别与作用,已在上一篇说明,这里不在赘述。实例#include<thread>#include<iostream>#include<algorithm>#include<vector>#include<windows.h>class WorkThread...
2019-08-07 10:23:02 325
原创 c++11_多线程_1:多线程机理
c++11线程介绍在c++11标准线程库之前的相关线程库:要么是属于某个单独平台的,例如:POSIX线程库pthread(Linux),Windows线程库(Windows winapi);要么需要第三方库支持,如第三方数据库:Boost线程库。线程与进程显著区别:不同线程间可共享同一地址资源(内存、全局变量);不同的进程间拥有独立的地址空间,相互间不共享。线程的几个状态在一个线程的生...
2019-08-07 10:15:19 218
原创 谈谈c++的仿函数(或称函数对象)
缘起:在c++ STL中泛型算法for_each()的使用中提到了仿函数的使用,这里从实例的角度出发,分析c++ 中的仿函数。定义及使用方式:c++ 仿函数(仿函数不仅在c++ 语言中有,如Java)即为类对象能像函数那样调用使用。c++中通过在类的定义中重载()运算符实现。注意:仿函数在使用时与构造函数本质的区别是:构造函数是在声明(定义)类对象的时候调用;而仿函数是已定义好的类对象上进行...
2019-08-04 17:28:43 907
原创 c++:论类成员变量初始化的不同方式与顺序
缘起:在看c++ 代码是发现,类成员中的变量在类定义时直接进行了初始化(赋值),这对于我一直使用初始化列表或构造函数对类的成员变量进行初始化的程序员来说有点新奇,于是找了各例子,进行了下总结。例子#include<iostream>using namespace std;class Test {public: int a = 1; Test() {} Test(i...
2019-08-03 15:41:23 549
WIX3.5--WIX3.7安装包
2019-01-17
从excle提取信息,并进行邮件群发
2019-01-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人