先读一本设计模式入门书,深入浅出设计模式,之后再拜读一下gof设计模式。工作也有两年时间了,说设计模式接触的应该比较多了,只是一直没有进行系统的整理。说起来,刚入职做webkit这让我有一个比较高的技术起点,技术视界也比较宽广。
抓时间系统过一遍设计模式,**下编码的艺术。
工厂模式:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来。好比是:
工厂生产产品,只需要告诉工厂需要什么样的产品,不需关心制造产品的具体过程。书中将工厂模式分为三类:简单工厂模式工厂方法模式抽象工厂模式1.
简单工厂模式。
和名字一样很简单,由如下组成:
1.工厂创建“产品”对象统一通过“工厂”进行,只需要告诉工厂不同的产品需求,就会产生具体产品。不需要了解产品制造过程。
2.抽象的产品具体产品的父类,定义同类产品的通用特性。3.具体的产品就是具体的产品。
直接上**,对程序员来说,这是最直观的解释。[cpp]view plaincopyenum tcartype;
/抽象产品class car;
/具体产品。
class benz : public car};
class bmw : public car};
class carfactory}};
这种模式,并不符合开闭原则,如果新增汽车类型,那么需要修改carfactory中静态函数的switch**。2.工厂方法模式。
工厂方法模式去掉简单工厂模式中,工厂方法的静态属性,使可以被子类继承。它的组成如下:1.抽象工厂2.具体工厂3.抽象产品4.具体产品。
抽象产品和具体产品的**不需要修改,下面没有列出,以下是抽象工厂和具体工厂的实现。
class carfactory;
class benzfactory};
class bmwfactory};
/简单调用方法。
carfactory* facory = new bmwfactory();car* bmw = facory->producecar();
可以看到,由于加入抽象工厂,对象的数量成倍增长,每个产品都需要对应一个工厂。当然,我们可以通过传入atype参数,将一类汽车放入一个工厂中生产。3.抽象工厂模式。
我觉得这个和工厂方法模式区别不大,就是对工厂和产品做了一个分类。//抽象产品class newcar;
class oldcar;
/具体产品。
class benznew : public newcar};
class benzold : public oldcar};
class bmwnew : public newcar};
class bmwold : public oldcar};
/工厂。class carfactory;
class benzfactory : public carfactory
oldcar* produceoldcar(/*tcartype atype*/)
class bmwfactory : public carfactory
oldcar* produceoldcar(/*tcartype atype*/)
/简单调用方法。
carfactory* factory = new benzfactory();
newcar* newcar = factory->producenewcar();oldcar* oldcar = factory->produceoldcar();
设计模式学习笔记 命令模式
命令模式将请求封装成对象,以便使用不同的请求 队列或日志来参数化其他对象。命令模式也支持科撤销的操作。提供了用统一方法执行不同行为的简单机制。允许在运行时改变所处理的请求,以及如何处理请求。仅仅需要很少的 实现。当条件调度程序已经足够的时候,会增加设计的复杂度。命令模式将发出请求的对象和执行请求的对...
C设计模式学习
1 设计模式之开篇。很长时间没有写文章了,前段时间写的c 语法糖分享得到有很多朋友支持,这个也使得我有信心继续分享下去,在这里非常感谢大家!这次开始给大家分享一下设计模式,我个人觉得设计模式也对于我们提高个人技术水平来说也是一个必不可少的知识点,最近我有重新温习了一下设计模式,今天把我学习时的心得给...
设计模式学习笔记
创建型模式。抽象工厂生成器工厂方法原型单件适配器桥接组合装饰外观享元 职责链。abstract factorybuilderfactory 可产生一系列类的对象复杂步骤逐步创建对象。拷贝对象原型。全局一个实例,一个访问点对象结构型模式。将一个类的接口进行转换后兼容,解决接口不匹配。将抽象部分与实现部...