摘要: 书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。考虑如下场景:汽车修理厂,每天都有不同品牌的汽车,出现不同的问题。但是存在共同的目的:被修理。 修理厂里有分工各不同的工程师。负责修理发动机,钣金,等等,但是作用是相同的:修理。下面把各个品牌的汽车,和各个岗位的工程师 进行抽象与实现的分离。//先定义工程师的抽象类class IEngineer{public: virtual void Dofix() = 0;};//定义负责修理发动机的工程师class CEngineer:public IEngineer{public: void Dofix() { ... 阅读全文
posted @ 2012-01-15 13:32 rookie_zw 阅读(165) 评论(0) 推荐(0)
摘要: 读取未初始化的值会导致正确的结果。 主要看看类和结构体的初始化。class A{public: A(string strname) { m_name = strname; } ~A(){}private: string m_name;}这样写没错,能完成对象的初始化工作。但在构造函数中完成的不是初始化动作,是赋值动作。c++规定,对象成员初始化,发生在进入对象构造函数体之前。所以,以上的动作不是在初始化,而是在赋值。最佳的初始化做法是:使用初始化列表。class A{public: A(string strname):m_name(strnam... 阅读全文
posted @ 2012-01-14 10:42 rookie_zw 阅读(105) 评论(0) 推荐(0)
摘要: 定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(Factory Method)使一个类的实例化延迟到其子类。也叫虚构造器(Virtual Constructor)代码如下://定义产品接口,从而可以扩展出N多系列产品,以手机为例class ISamsung{public: ISamsung(){} virtual ~ ISamsung(){} virtual void Call() = 0 ;}//定义工厂接口,用来生产不同系列的手机class IFactory{ public: IFactory(){} virtual ~ IFactor... 阅读全文
posted @ 2012-01-13 23:53 rookie_zw 阅读(120) 评论(0) 推荐(0)
摘要: 将一个类的接口转换成客户需要的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也称作包装器(Wrappter)。 实施就是实现了接口的一个转换,起到了一个中间的桥梁的作用。 举个简单的例子,显卡都是VGA接口,如果你换了显卡,结构是hdmi 或者 其他类型的接口,怎么办?很好办,弄个转接头就搞定了,适配器在这里就扮演了转接头的作用。 1 //VGA视频接口 2 class CVgaInterFace 3 { 4 public: 5 CVgaInterFace(){} 6 virtual ~ CVgaInterFace(){} 7 ... 阅读全文
posted @ 2012-01-13 21:19 rookie_zw 阅读(140) 评论(0) 推荐(0)
摘要: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 (copy)来看下面个例子: 1 class CSamsung 2 3 { 4 5 public: 6 7 CSamsung(){} 8 9 virtual ~CSamsung(){} 10 11 virtual void MakeCall... 阅读全文
posted @ 2012-01-13 13:22 rookie_zw 阅读(120) 评论(0) 推荐(0)
摘要: pthread_cond_wai(条件等待)通常情况下,pthread_cond_wait() 和mutex一起配合使用。用生产者与消费者的关系来看。例如,有一个生产者,2个消费者。 1 //定义全局的 互斥对象和条件等待对象 2 3 pthread_mutex_t mtx; 4 5 pthread_cond_t cond; 6 7 //消费者线程函数: 8 9 void threadproc(void * parm)10 11 {12 13 while(1)14 15 {16 17 pthread_mutex_lock(&mtx);//锁定mtx ,以... 阅读全文
posted @ 2012-01-13 13:08 rookie_zw 阅读(337) 评论(0) 推荐(0)
摘要: 看如下代码: 1 class BASEs 2 { 3 public: 4 BASE(int index):_index(index) 5 { 6 } 7 ~BASE(void) 8 { 9 }10 private: 11 int _index; 12 }; 这是一个没有默认构造函数的类。class CHILD:public BASE { public: CHILD( ):BASE(0)//这里是关键。 { } ~CHILD(void) {... 阅读全文
posted @ 2012-01-13 12:58 rookie_zw 阅读(145) 评论(0) 推荐(0)