- 博客(15)
- 收藏
- 关注
原创 设计模式:Factory Method
工厂方法-Factory Method动机-Motivation在软件系统中,经常面临创建对象的工作,由于需求的变化,需要创建的对象的具体类型也经常变化。例子文件分割器代码class ISplitter{public: virtual void split()=0; virtual ~ISplitter(){}};class BinarySplitter : public ISplitter{ };class TxtSplitter: public ISpl
2020-05-29 14:03:54
128
原创 设计模式:Bridge
Bridge-桥模式由于某些类型的固有实现逻辑,使得类型具有多个变化维度。考虑这个例子,需要实现通信设计。设置有Message类型,有Login、SendMessage、SendPicture,以及PlaySound、DrawShape、WriteText、Connect。平台支持方面,需要支持PC平台设计,同时需要支持Mobile平台设计。平台间的差异在于播放声音、图形绘制、写入文本、链接网络等功能的不同,考虑实现PC、Mobile继承Message,并重写上述功能函数。之后,需求需要实现平台
2020-05-29 12:45:28
243
原创 设计模式:Decorator
Decorator-装饰模式装饰模式用于处理,软件组件设计中的责任划分不清晰,导致子类通过继承得到大量的冗余重复代码,代码的急剧膨胀问题。装饰模式关键在于划清责任。考虑设计一个IO库、相关流操作。其中有文件流,网络流、内存流等,操作有对流的加密,缓存等。考虑设计一个Stream抽象基类,FileStream、NetWorkStream、MemoryStream继承与Stream基类。而加密操作需要加密具体的流,而不是抽象上的流,所以继承自FileStream、NetWorkStream、Memory
2020-05-29 12:12:50
220
原创 设计模式:Observer/Event
Observer/Event-观察者模式在软件构建过程中,我们可能需要为某些对象建立通知依赖关系,当一个对象的状态发生改变,所有的依赖对象(观察者)都将得到通知。如下例子,考虑实现一个文件分割器,需要将文件分割进度通过某种控件显示出来。class MainForm : public Form{ TextBox* txtFilePath; TextBox* txtFileNumber; ProgressBar* progressBar;public: void Button1_Click(
2020-05-28 13:25:14
181
原创 设计模式:Strategy
Strategy-策略模式税务计算根据不同国家的税率进行不同算法计算enum TaxBase { CN_Tax, US_Tax, DE_Tax, FR_Tax //更改};class SalesOrder{ TaxBase tax;public: double CalculateTax(){ //... if (tax == CN_Tax){ //CN***********
2020-05-28 12:45:51
143
原创 设计模式:Template Method
Template Method在程序的开发过程中可以将开发者分为类库开发人员和应用程序开发人员。一般情况下,由类库开发人员实现基本功能函数,再有应用程序开发人员使用类库实现逻辑组装,考虑如下例子。//程序库开发人员class Library{public: void Step1(){ //... } void Step3(){ //... } void Step5(){ //... }};//应用程序开发人员class Applicat
2020-05-28 10:58:30
110
原创 数据结构:单链表
#include<iostream>#include<random>#define ERROR 0#define OK 1using namespace std;//节点定义typedef int ElemType;typedef int Status;typedef struct Node { ElemType data;//data域 Node* next;//指针域}Node;typedef Node* LinkList;//定义LinkList
2020-05-19 16:15:24
156
原创 数据结构:线性表
#include<iostream>using namespace std;#define MAXSIZE 5#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0//状态信息typedef int Status;//存储返回信息typedef int ElemType;//线性表结构体定义 struct SqList{ int data[MAXSIZE];//data数组 i
2020-05-19 15:06:48
182
原创 读书笔记:Windows核心编程 字符和字符串处理
字符编码一、单字节 ANSI二、双字节 DBCS三、windows平台下字符编码windows Vista使用Unicode-16 双字节编码,支持使用代理扩展至32位4个字节,描述少数使用16位不够的字符。在简化代码与节省空间上做了折衷的处理。.NET Framework始终使用Unicode-16编码所有字符和字符串。所以在开发Windwos应用程序时,使用unicode-16编码可以改进性能和较少内存消耗。UTF的其他标准UTF-8:将某些字符编码为单字节、某些字符编码为双字节、某些字符
2020-05-11 11:17:25
329
原创 读书笔记-Windows核心编程:错误处理
常见的Windows函数返回值数据类型当windwos 检测到错误时,会使用一种叫线程本地存储区的机制。其作用是将错误代码与"主调线程’"关联。是不同线程间互不干扰对方错误代码,使得各个线程独立运行。当错误产生时,windows函数会返回一个已发生错误,可以使用GetLastError函数,查询上一个函数调用设置的线程的32位错误代码。<WinError.h>包含了定义的错误代码列表,可以通过查看源码得到。错误的基本表示方式有,一个消息ID、一个消息文本、和一个标号。当错误产生是
2020-05-10 13:49:56
212
原创 算法:欧几里得法求最大公约数
算法实现int gcd(int p,int q){if(q==0)return p;int r=p%q;return gcd(q,r);}测试
2020-05-06 15:12:18
453
原创 C++泛化设计与函数式编程
本篇有关C++函数式编程的弹性设计。C++支持五种编程形式,过程,面向对象,函数式,泛型,元编程。本篇不过多介绍C++语法,希望各位对于函数式编程的知识标准库function(调用形式)lambda表达式函数函数指针bind参数绑定重载了函数调用运算符的类有基本的认识与了解。...
2020-02-05 17:19:18
1067
原创 C++ pure virtual,impure virtual,non-virtual函数关于继承的实际意义
区分接口继承和实现继承本篇主要讨论pure virtual函数(纯虚函数),impure virtual函数(虚函数),以及non-virtual函数(非虚函数)的实际意义.概念上通过public继承,实际上可以分为函数接口继承(function interfaces)和函数实现继承(funcion implementations).考虑下面这个例子class Shape{public:...
2020-02-02 21:43:33
560
原创 C++ Strive for exception-safe code
前言:本篇有关于C++异常安全性,但对异常安全性的讨论并不只限制于C/C++语言.首先我们可以先来分析一下下面的代码class PrettyMenu{public: ... //改变背景图像 void changeBackground(std::istream& imgSrc); ...private: //互斥器 Mutex mutex; //目前的背景图像 I...
2020-02-01 20:27:54
1084
原创 C++STL std::swap
有如下两个类 当前需要交换两个Widget对象class WidgetImpl{public:private:int a,b,c;std::vector<double>v;};class Widge{public:Widget(const Widget& rhs);Widget& operator=(const Widget& rhs){...
2020-01-30 14:58:16
1172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人