![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
xlf13872135090
这个作者很懒,什么都没留下…
展开
-
设计模式之适配器模式
STL中用到了迭代器模式和适配器模式,下面是适配器模式,对应大话设计模式的第17章。适配器的定义是:将一个类的接口转换客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器主要应用于希望复用一些现存的类,但是又与复用环境要求不一致,且双方都不太适宜更改的情况下。STL中的适配器模式有容器适配器stack, queue,都是复用了deq原创 2014-02-23 14:46:05 · 552 阅读 · 0 评论 -
简单工厂模式,工厂模式
今天看了一下工厂相关的模式,一个思想就是将对象的创建都放在工厂里,工厂负责生产对象。工厂屏蔽了具体构造了什么对象。相关的模式有三种:简单工厂模式,工厂模式,抽象工厂模式。第一种:简单工厂模式将创建对象的逻辑放在工厂里,以书上计算器的代码为例,以下为简单工厂模式的实现,代码中有相关的解释//简单工厂模式实现的计算器,//1 有一个运算的基类,各类运算继承该基类,如果增加新的运算,则原创 2014-02-20 15:44:42 · 560 阅读 · 0 评论 -
抽象工厂模式
例子是大话设计模式上第15章的内容,用抽象工厂模式,实现了程序中业务逻辑与数据访问的解耦。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。以下是书上问题的代码实现://抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,//而无需指定他们的类。如SqlserverFactory提供创建Sqlserver相关的用户和部门//优点:易于交换系列产品。原创 2014-02-20 15:56:07 · 542 阅读 · 0 评论 -
桥接模式
意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化。抽象与实现分离:不是说,让抽象类与其派生类分离,实现指的是抽象类和它的派生类用来实现自己的对象。合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的声原创 2014-02-28 10:25:50 · 572 阅读 · 0 评论 -
享元模式-对象结构型模式
//享元模式:运用共享技术有效地支持大量细粒度的对象#include #include #include using namespace std;//User,外部状态类 class User{public: User(string name) : _name(name) { } string Name() { return _name; } priva原创 2014-03-25 09:33:26 · 661 阅读 · 0 评论 -
builder模式 c++
builder模式:对象创建型模式意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用性:1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2 当构造过程必须允许被构造的对象有不同的表示时参与者:Builder: 为创建一个Product对象的各个部件指定抽象接口ConcreteBuilder:实现Builder 的原创 2014-02-25 14:27:15 · 1691 阅读 · 0 评论 -
原型模式 c++(对象创建型模式)
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。不用重新初始化对象,而是动态的获得对象运行时的状态。优点:1 可以在运行时刻增加和删除产品。2 改变值以指定新对象3 改变结构以指定新对象4 减少子类的构造5 用类动态配置应用主要缺陷:每个Prototype的子类都必原创 2014-02-23 18:19:07 · 691 阅读 · 0 评论 -
代理模式-对象结构型模式
意图:为其他对象提供一种代理以控制对这个对象的访问。动机:对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对他进行创建和初始化。适用性:1 远程代理:为一个对象在不同的地址空间提供局部代表。2 虚代理:根据需要创建开销很大的对象。3 保护代理:控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。4 智能指引:取代了简单的指针,在访问对象时执原创 2014-03-25 15:22:58 · 573 阅读 · 0 评论 -
职责链模式-对象行为模式
意图:使多个对象有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。这将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。模式是给多个对象处理一个请求的机会,从而解耦发送者和接受者。请求沿对象链传递直至其中一个对象处理它,如下图所示:从第一个对象开始,链中收到请求的对象要么亲自处理,要么转发给链中的下一个候选者。提交请求的对象并不明确的知道哪一个对象将会处理原创 2014-03-25 21:54:35 · 635 阅读 · 0 评论 -
模板模式-类行为型模式
意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。动机:一个模板方法用一些抽象的操作定义一个算法,而子类重定义这些操作以提供具体的行为。通过使用抽象操作定义一个算法中的一些步骤,模板方法确定了它们的先后顺序,但它允许子类改变这些具体步骤以满足各自的需求。适用性:1一次性实现原创 2014-03-28 11:03:52 · 658 阅读 · 0 评论 -
命令模式-对象行为模式
意图:将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作.动机:有时必须向某对象提交请求,但并不知道关于被请求的操作或请求的接受者的任何信息。提交一个请求的对象仅需直到如何提交它,而不需要知道该请求将会如何被执行。适用性:1 抽象出待执行的动作以参数化某对象。2 在不同的时刻指定,排列和执行请求。3 支持取消操作。Com原创 2014-03-26 10:52:18 · 716 阅读 · 0 评论 -
单例模式(对象创建型)c++
单例模式是:保证一个类仅有一个实例,并提供该一个访问它的全局访问点。通常可以让一个全局变量是的一个对象被访问,但它不能防止你实例化对个对象。一个好的方法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且提供一个访问该实例的方法(static方法)。这种是懒汉式单例类:即第一次被引用时,才将自己实例化。饿汉模式是:自己被加载时就将自己实例化。另外因为定义的静态变量原创 2014-02-23 20:59:29 · 1695 阅读 · 0 评论 -
外观模式-对象结构型模式
意图:为子系统中的一组借口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用性:当要为一个复杂子系统提供一个简单接口时;客户程序与抽象类的视线部分之间存在着很大的依赖性。引入facade将这个子系统与客户端以及其他的子系统分离,可以提高子系统的独立性和可移植性。当需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口原创 2014-03-24 20:35:06 · 657 阅读 · 0 评论 -
设计模式之装饰模式
意图:动态的给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活。动机:为某个对象而不是整个类添加一些功能。适用性:在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。处理那些可以撤销的职责。当不能采用生产子类的方法进行扩充时。一种情况是有大量独立的扩展,为支持每一种组合奖产生大量的子类,使得子类数目呈爆炸性增长。另一种情况是因为原创 2014-03-24 13:16:08 · 633 阅读 · 0 评论 -
c++之原型模式
定义用原型(Prototype)实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 结构 理解1. Prototype是原型基类,提供Clone纯虚方法,它根据不同的派生类来克隆不同的对象。2. ConcretePrototype是原型具体类。实现Clone方法,克隆自己,返回克隆后的新对象。3转载 2014-02-23 15:42:16 · 641 阅读 · 0 评论 -
Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
最近重读GOF的《设计模式》,读到Builder模式的时候,发现还是不能领悟;网上搜了下其他人的解释,发现很多人都用错了Builder模式,结构形似Builder,实际上却更像Template、或者Factory Method,或者四不像,并没有体现出Builder模式的思想和威力;通过对比学习,也逐渐加深了我对Builder模式的认识,于是就有了这篇文章。0. GOF - Builder转载 2014-02-25 13:42:17 · 756 阅读 · 0 评论 -
适配器模式(类对象结构型模式)
意图:将一个类的借口转换成客户希望的另外一个接口。使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。适用性:1 想使用一个已经存在的类,而它的借口不符合你的需求2 创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作3 (仅适用于对象Adapter)使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。结原创 2014-02-27 17:20:08 · 648 阅读 · 0 评论 -
状态模式--对象行为型模式
意图:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.适用性:1 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.2 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态.这个状态通常用一个或多个枚举常量表示,通常,有多个操作包含这一相同的条件结构.State模式将每一个条件分支放入一个独立的类中.这样可以根据对象自原创 2014-03-28 11:08:21 · 996 阅读 · 0 评论 -
观察者模式-对象行为模式
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。动机:将一个系统分割成一系列相互协作的类有一个副作用:需要维护相关对象间的一致性。不希望为了维持一致性而使各类紧密耦合,这样会降低可重用性。Observer模式中的关键对象是目标(subject)和观察者(observer).一个目标可以有任意数目的依赖它的观察者。一旦目标的状态发原创 2014-03-27 23:00:14 · 1121 阅读 · 0 评论 -
访问者模式-对象行为模式
终于到最后一个模式了,意图:表示一个作用于某对象结构中的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作。动机:使用Visitor模式,必须定义两个类层次:一个对应于接受操作的元素,另一个对应于定义对元素的操作的访问者(visitor)。给访问者类层次增加一个新的子类即可创建一个新的操作。适用性:1一个对象结构包含很多类对象,它们有不同的原创 2014-03-28 16:58:53 · 685 阅读 · 0 评论 -
备忘录模式-对象行为模式
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象回复到原先保存的状态。动机:有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制,而要实现这些机制,必须实现将状态信息保存在某处,这样能将对象恢复到它们先前的状态。但是对象通常封装了其部分或所有的状态信息,使得其状态不能被其他对象访问原创 2014-03-27 22:05:51 · 731 阅读 · 0 评论 -
设计模式之组合模式
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。适用性:想表示对象的部分-整体层次结构,希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。典型表示结构图:Component:声明组合中的对象声明接口;在适当的情况下,实现所有类共有接口的缺省行为;声明一个接口用于访问和管理C原创 2014-03-24 10:26:50 · 572 阅读 · 0 评论 -
解释器模式-类行为型模式
意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器适用该标识来解释语言中的句子。动机:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。例如:搜索匹配一个模式的字符串是一个常见的问题。正则表达式是描述字符串模式的一种标准语言。与其为每一个模式都构造一个特定原创 2014-03-27 10:48:31 · 552 阅读 · 0 评论 -
策略模式--对象行为模式
意图:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。使算法可独立于使用它的客户而变化。适用性:许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个来配置以各类的方法。需要使用一个算法的不同变体。算法使用客户不应该知道的数据,可使用策略模式以避免暴露复杂的,与算法相关的数据机构。一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现原创 2014-03-24 16:43:35 · 580 阅读 · 0 评论 -
中介者模式-对象行为模式
意图:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。动机:面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。最坏的情况,每个对象都知道其他所有对象。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会降低其复用性。通过将集体行为封装在一个单独的中介者对原创 2014-03-27 15:38:25 · 596 阅读 · 0 评论