![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 63
肥萝卜使大力
这个作者很懒,什么都没留下…
展开
-
多态的分类和抽象的描述
多态 继承 抽象原创 2011-05-22 19:18:00 · 1078 阅读 · 0 评论 -
C++沉思录读书笔记(4章)-限定用户只能读而不能写类数据成员的方法
限定用户只能读而不能写类数据成员的方法方法1:可以通过使用常引用,如下所示class Vector{public:const int & length;//使用构造函数将length绑定到true_length上//...private:int true_length;};方法2:通常还是使用如下方式class Vector{public:i原创 2011-10-23 19:58:52 · 1041 阅读 · 0 评论 -
冒号课堂-编程范式与OOP思想-精华摘录-1
学会不如会学,会学不如会用,会用不如被用对于一个软件开发者来说,这意味着 4 个阶段: 学会(知其所然)——掌握一些具体编程知识的初级程序员。 会学(知所以然)——能快速而深刻地理解技术并举一反三的程序员。 会用(人为我用)——能将所学灵活运用到实际编程设计之中的高级程序员。 被用(我为人用)——能设计出广为人用的应用程序(application)、库(library)、工具包原创 2011-10-29 21:51:47 · 1847 阅读 · 2 评论 -
设计模式-创建型模式之 Singleton(单例)
意图:保证一个类仅有一个实例,并提供一个全局访问点效果:1 实现对唯一实例的受控访问2 是对全局变量的一种改进。避免了存储唯一实例的全局变量污染命名空间3 不仅可以实现单例,还可以实现N例,即允许可变数目的实例,还可以实现单件注册表代码:#include using namespace std;class Singleton{private: st原创 2011-11-16 20:12:19 · 767 阅读 · 0 评论 -
C++沉思录读书笔记(8章)-一个面向对象程序范例1
这个例子很好的展示了面向对象编程的三个要素:数据抽象、继承和动态绑定。问题:算术表达式的表达式树, 如(-5)*(3+4)对应的表达式树为:我们希望通过调用合适的函数来创建这样的树,然后打印该树完整的括号化形式。例如:Expr t = Expr("*", Expr("-",5), Expr("+", 3, 4));cout 输出结果为:((-5)*(3+4))原创 2011-11-01 15:13:08 · 1092 阅读 · 0 评论 -
C++沉思录读书笔记(8章)-一个面向对象程序范例2
此回是针对上回所设计方案的扩展,下面将会演示(1)如何增加计算表达式的值的功能(2)如何增加新的节点类型(已经有表示单个数、一元操作符、二元操作符的节点类型Int_node\Unary_node\Binary_node,将演示如何增加三元操作符(Ternary_node))完整代码如下:#include #include using namespace std;原创 2011-11-01 17:24:36 · 1167 阅读 · 0 评论 -
C++沉思录读书笔记(17章)-见识泛型算法的威力
在这回的学习中,我们能体会到泛型算法的威力,这是通过模板(抽象)实现的泛型算法是一种用对其所用的数据结构进行尽可能少的假设的方法表达的算法,模板使得泛型(genericity)更为容易首先来看一个简单的例子,假设我们想找整形数组中第一个等于某个给定值的元素,代码很简单,如下:const int* find(const int* array, int n, int x)原创 2011-11-07 22:00:48 · 1474 阅读 · 2 评论 -
C++沉思录读书笔记(9,10章)-感想
看第九章,第十章看得想死,领会了一些设计精神,但无法用语言表达,此两章还需要继续研究。教训:复杂的设计不能光看,用笔将其互相的关系画出来才清晰的将其理清。感悟:OOP设计是一门艺术,需要观摩大师指点,需要自己一步步实践。原创 2011-11-02 16:49:47 · 971 阅读 · 1 评论 -
C++沉思录读书笔记(20章)- 通过迭代器配接器提高泛型算法的通用性
此次将通过一个例子来说明迭代器配接器的作用,具体来说,使用迭代器配解器也可以扩展泛型算法的通用性迭代器配接器,就是把迭代器作为参数并转化为其他迭代器的模板口头的空谈太过于抽象而言而无实,讲很多也未必能理解,软件工程师看代码的能力一般比看中文的能力强,通过阅读代码进行理解可靠得多,所以应该避免过多的口舌我们的作为示范的泛型算法模板如下template T find(原创 2011-11-08 21:14:27 · 1357 阅读 · 2 评论 -
C++沉思录读书笔记(7章)-句柄:第二部分
上一回讨论的句柄技术有一个明显的缺点:为了将句柄捆绑到类T的对象上,必须要新定义一个具有类型为T的成员对象的新类。这个毛病相当麻烦,如果想新设计一个类的句柄类,就需要新定义两个类。C++之父提到过一种定义句柄类的技术可以弥补这一个缺点,主要思想就是将引用技术从数据中分离出来,把引用计数放到句柄类自己的对象之中。示例代码如下所示:#include using nam原创 2011-10-30 22:12:28 · 865 阅读 · 0 评论 -
C++沉思录读书笔记(6章)-句柄:第一部分
创建代理会复制所代理的对象,如何避免这些复制呢? 可以通过句柄(handle)类来实现。句柄类和智能指针有点类似,通过重载句柄类的*和->操作符,可将句柄类改造称为智能指针。 从效果上来说,handle就是一种只包含单个对象的容器,它通过允许多个handle对象指向同一个对象来避免复制。 定义句柄类,我们还需要新定义一个类来容纳被引用类对象的引用计数原创 2011-10-26 21:37:31 · 906 阅读 · 0 评论 -
设计模式-创建型模式之 Factory Method(工厂方法)
意图:定义一个创建对象的接口,让子类决定实例化哪个类,使得一个类的实例化延迟到其子类。又叫虚构造器(Virtual Constructor),算是最基本的一个模式一个应用实例:#include using namespace std;class Operation //工厂方法创建的对象(产品)的接口{public: int num1, num2; virtual原创 2011-11-15 21:50:50 · 1184 阅读 · 0 评论 -
设计模式实现系列-简单工厂模式-工厂模式-抽象工厂模式
设计模式实现系列 简单工厂模式 工厂模式 抽象工厂模式原创 2011-05-25 14:57:00 · 574 阅读 · 0 评论 -
设计模式实现系列-策略模式-装饰模式-代理模式
设计模式 策略模式 装饰模式 代理模式原创 2011-05-23 21:05:00 · 1171 阅读 · 0 评论 -
设计模式-概念总结-1
语言的选择对设计模式的影响一些特定的语言的语言特性,决定了哪些设计模式的机制可以方便的实现,哪些很难实现,比如如果采用过程性的语言,则“继承”“封装”“多态”这些面向对象语言固有的特性也需要设计成一种设计模式。总之,对特定的设计模式,有时候用一种语言会比另外一种语言更有优势来表示它MVC中的设计模式MVC采用“订阅\通知”协议分离了视图和模型,一旦模型的数据发生变化,就原创 2011-11-06 13:17:17 · 969 阅读 · 0 评论 -
设计模式-概念总结-2
什么是动态绑定,什么是多态?发送给对象的请求与它相应的操作在运行时刻的连接就称之为动态绑定(dynamic binding)动态绑定允许在运行时刻彼此替换有相同类型(接口)的对象,这种可替换性就称为多态(polymorphism)抽象类,具体类,混入类抽象类的主要目的是为其子类定义公共接口,抽象类不能实例化,抽象类中定义但没实现的操作是抽象操作非抽象类被称为具体类混原创 2011-11-12 17:07:26 · 1057 阅读 · 0 评论 -
C++沉思录读书笔记(5章)-代理类
问题描述:如何设计一个容器,能使得它能包含类型不同但是彼此相关的对象?问题描述:如何复制编译时类型未知的对象?解决方案一:使用容器存储指向对象的指针,通过继承来处理类型不同的对象。这个方案有严重的问题: 问题一:无法让容器中的指针指向一个局部变量,例如:Vehicle * parking_lot[1000];Automobile x = /*..*/原创 2011-10-26 10:43:52 · 872 阅读 · 0 评论 -
设计模式-创建型模式之 Abstract Factory(抽象工厂)
意图:提供一个创建一系列或相关依赖对象的接口,而无需指定它的具体的类代码:#include using namespace std;class Product1{public: virtual int Behavior() = 0;};class Product1A:public Product1{public: int Behavior() { cout原创 2011-11-14 21:42:59 · 649 阅读 · 0 评论 -
设计模式-创建型模式之 Builder(生成器)
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示代码:#include #include #include using namespace std;class Product //一个被构造的复杂对象,是一个包含组件的类{private: vector Part;public: void AddPartA(string PartNam原创 2011-11-14 22:11:09 · 636 阅读 · 0 评论 -
探索智能指针
代码如下,不过这个智能指针有个缺陷,就是只能指向在堆中创建的对象,加以修改后可以改成只能指向在栈中创建的对象,但是无法兼顾两种情况(如果要兼顾两种情况,则智能指针只能指向对象的新建副本,这又失去了指针原有的含义,so...)#include using namespace std;class Object//能被智能指针所指的类{public: void ShowAddress原创 2011-10-26 20:42:23 · 646 阅读 · 0 评论 -
C++沉思录读书笔记(19章)- 使用泛型迭代器将泛型算法应用到不同的场合
这回将介绍,如何使用不同的迭代器,将一个泛型算法应用到不同的场合我将使用泛型算法Copy为例子,利用不同的迭代器去应用这个算法,此算法代码如下:template Out Copy(In start, In end, Out dest) //模板copy在名称空间std中已经包含,为与标准版本区别而命名为Copy{ while(start != end) *dest++ =原创 2011-11-08 17:37:17 · 985 阅读 · 0 评论