`
文章列表
一,概述 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为之。 优点:客户提出请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它 二,职责链基本代码 #include <iostream> using namespace std; class Handler { protected: static Handler *successor; public: void SetSuccessor(H ...
一,概述 定义:命令模式将一个请求或者操作封装到一个命令对象中。允许系统使用不同的请求将客户端参数化,对请求排队或者记录请求日志,提供命令的撤销,恢复能力 优点: 1 命令模式使新的命令很容易被加入 2 允许接受请求方否决请求 3 可较容易地设计一个命令队列 4 可以实现对请求的Undo,Redo 5 可以将命令计入日志 二,示例 两个人 去吃烧烤,先路过一个烧烤摊,人多管理比较混乱,命令请求者跟命令实施者“紧耦合”。 人太对,没吃,然后去烧烤店,遇到了经典的命令模式:服务生负责记录命令,传递命令。厨师负责执行命令。顾客则发出命令 1) ...
如果对Linux下静态链接库和动态链接库感兴趣,请狂点击 -->你懂的 一,概念 1)静态链接库就是你使用的.lib文件,库中得代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。    ...
如果对Linux下静态链接库和动态链接库感兴趣,请狂点击 -->你懂的 一,概念 1)静态链接库就是你使用的.lib文件,库中得代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。    ...
一,概述 定义:将抽象部分与实现部分分离,使它们都可以独立的变化。 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 【注意】C++中继承声明为 public 二,示例 两款手机,品牌M和品牌N,且每部手机都包含通讯录和游戏。 1)第一种实现 实现: 以手机品牌为抽象基类,手机品牌M、N继承手机品牌基类。 再分别实现M、N中的游戏 ...
一,概述 定义:将抽象部分与实现部分分离,使它们都可以独立的变化。 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 【注意】C++中继承声明为 public 二,示例 两款手机,品牌M和品牌N,且每部手机都包含通讯录和游戏。 1)第一种实现 实现: 以手机品牌为抽象基类,手机品牌M、N继承手机品牌基类。 再分别实现M、N中的游戏 ...
一,概述 1)接口的多种不同的实现方式即为多态。 2)多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在C++中都是通过虚函数(Virtual Function) 实现的。 3)关键点:多态还有个关键之处就是一切用指向基类的指针或引用来操作对象 二,示例 1)普通的对象操作方式 #include <iostream> using namespace std; class A{ publ ...
一,概述 1)接口的多种不同的实现方式即为多态。 2)多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在C++中都是通过虚函数(Virtual Function) 实现的。 3)关键点:多态还有个关键之处就是一切用指向基类的指针或引用来操作对象 二,示例 1)普通的对象操作方式 #include <iostream> using namespace std; class A{ publ ...
一,概述 单例模式确保某一个类只有一个实例,而且自行实例化(自己保存它的唯一实例)并向整个系统提供这个实例。这个类称为单例类。 显然单例模式的要点有三个: 一是某个类只能有一个实例 ( ...
一,概念 成员函数:在类的定义中规定在类体中说明的函数作为类的成员,称为成员函数。 前面讲过一般的成员函数,它是根据某种类的功能的需要来定义的。又讲述了一些特殊的成员函数:构造函数、析构函数、拷贝初始化构造函数等。还有一些成员函数后面还会介绍。 成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。 二、内联性和外联函数 类的成员函数可以分为内联函数和外联函数。 1)内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。 2)外联函数是声明在类体内,定义在类体外的成员函数。外联函数的函数体在类的实现部分。 内联函数在 ...
一,概述 定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴漏该对象的内部表示。 作用:客户端可以不必知道数据集合的结构,而通过迭代器的接口来操作数据,不仅保护了数据结构,同时可以自定义数据的访问方式。 其实C++中的STL模板类中大量用到了此种设计模式! 二,示例 问题:售票员清点上车人数,然后挨个人遍历,让其买票。 class Program //客户端 { static void Main(string[] args) { ConcreteAggregate a = new ...
一,概述 概念:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。 Client:客户端 Component:组合模式中对象接口声明,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理其子部件。 SubMenu:表示节点对象,但是没有子节点。 Composite:定义有枝节点的行为,用来存储子部件,实现Component接口中与子部件有关的操作,比如增加和删除。 二,基本代码(C#) 由于C++中STL -- ...
一,概述 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。   2.Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Origin ...
一,概述 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 二,设配器基本构成 Target:客户期待的接口(可以是具体的或抽象的类) Adaptee:需要适配的类(用户要调用,但是不能直接调用) Adapter:设配器(继承用户所期待的Target,然后根据用户期待的接口适配调用真正需要调用的类Adaptee) #include <iostream> using namespace std; ...
一,概述 二十四点是一种益智游戏,它能在游戏中锻炼人们的心算,它往往要求人们将四个数字进行加减乘除(允许使用括号)求得二十四。然后将四个数字的计算公式表示出来。 二,中缀表达式求解 最直接的方法就是采用穷举法,游戏中可用的运算符只有四种,四个数字每个只能使用一次。 1)不考虑括号情况 4个数全排列:4!=24种 需要三个运算符,且运算符可以重复:4*4*4=64 总计:1536 2)考虑括号(是个难点) 自己想的加括号:四个数有五种加括号方式: (AB)CD 、AB(CD)、A( ...
Global site tag (gtag.js) - Google Analytics