
设计模式
文章平均质量分 69
FlowShell
这个作者很懒,什么都没留下…
展开
-
设计模式的学习(一):基本概念
今天看了了关于设计模式的书,感觉设计模式真的好强大,我学了两年的c++,以前从没有设计模式的概念,在设计类时很少考虑它的实现方法。造成设计的失败也是有的。在看书的过程中,发现对面向对象的一些看很基本的感觉,总是含糊不清,故此做个笔记,加深理解。 首先一个问题:什么是对象?一切皆为对象,准确的说,对象是一个自包含的实体,能用一组可识别的特性和行为来标示。那类(Class)又是什么呢原创 2009-07-17 09:58:00 · 799 阅读 · 0 评论 -
设计模式:命令模式
命令模式:将一个请求封装一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持课撤销的操作一个例子:烧烤厨师,各户的要求,服务员 代码如下://烧烤厨师#ifndef BARBECUER_H#define BARBECUER_H#include using std::cout;using std::endl;class Ba原创 2009-09-17 16:24:00 · 873 阅读 · 0 评论 -
设计模式:适配器模式
适配器模式:将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作适配器模式有两种:1.对象的适配器模式2.类的适配器模式 适配器类图: 一个例子://IPromotion基类#ifndef IPROMOTION_H#define IPROMOTION_Hclass IPromotio转载 2009-09-14 13:46:00 · 821 阅读 · 0 评论 -
设计模式:状态模式
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。UML类图: 一个例子://Auto类//Auto.h#pragma onceclass State;class Auto转载 2009-09-13 19:30:00 · 705 阅读 · 0 评论 -
设计模式:抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。类图如下:一个例子:在在两种不同的数据库里处理User,Department表的数据//User类#ifndef USER_H#define USER_H#include using std::string;class User{public: User(){}原创 2009-09-10 15:42:00 · 661 阅读 · 0 评论 -
设计模式:外观模式
何为外观模式?外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一子系统更加容易使用。它是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。UML类图: 一个例子:现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎转载 2009-09-05 23:35:00 · 652 阅读 · 0 评论 -
设计模式:模板方法模式
每天一个设计模式,今天看到了模板方法模式。以下是模板方法模式的定义。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类种,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。UML类图: 一个应用例子://AbstactClass#ifndef _PAPER_H_#define _PAPER_H_#include原创 2009-09-05 22:32:00 · 728 阅读 · 1 评论 -
设计模式:观察者模式
观察着人模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。UML类图如下: 一个例子:上课时,有些人在打牌,但是又怕老师看见,所以他们就叫一个人看着老师,只有老师一过来就告诉他们。具体代码如下: //Subject基类#ifndef OBSERVER_H#define原创 2009-09-07 13:39:00 · 806 阅读 · 0 评论 -
设计模式:建造者模式
建造者模式:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。适用性: 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被构造的对象有不同的表示时。UML类图: 一个示例:建造一个房子//House类#ifndef HOUSE_H#define HOUSE_H#include原创 2009-09-06 20:52:00 · 1030 阅读 · 3 评论 -
设计模式:原型模式
原型模式(Prototype Pattern)也是一种创建型模式,它关注的是大量相似对象的创建问题。我们经常会遇到这样的情况:在系统中要创建大量的对象,这些对象之间具有几乎完全相同的功能,只是在细节上有一点儿差别。 这样的情形经常遇到。三国系列游戏是我最喜欢的游戏系列之一。你有没有注意到那里边上百位英雄的头像基本上很相似?你仔细区分就会发现,虽然每个人都不同,但基本上只具有几种脸型:长方的、圆形原创 2009-09-03 15:51:00 · 652 阅读 · 0 评论 -
设计模式:工厂方法模式
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式角色与结构 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工转载 2009-09-03 14:33:00 · 626 阅读 · 0 评论 -
设计模式:代理模式
什么是代理模式:为其他对象提供一种代理以控制对这个对象的访问。 通常代理模式应用于以下几个场合:1. 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。比如:你可以将一个在世界某个角落一台机器通过代理假象成你局域网中的一部分。2. 虚拟(Virtual)代理:根据需要将一个资源消耗很大或者比较复杂的对象延迟的真正需要时才创原创 2009-09-02 22:43:00 · 627 阅读 · 0 评论 -
设计模式:装饰模式
装饰模式(Decorator),动态的给一个对象添加一些额外的职责,如下图,此图来自:> Component是定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator装饰类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道D转载 2009-09-02 22:01:00 · 819 阅读 · 0 评论 -
设计模式:几个原则
开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。 依赖倒转原则:A.高层模块不应该依赖底层模块,两个都应该依赖抽象,B.抽象不应该依赖细节,细节应该依赖抽象。 里氏代换原则:子类型必须能够替换它们的父类型。 其实这几个原则我理解的并的深刻,反正先写上以后再慢慢思考(本文内容源原创 2009-09-02 21:36:00 · 643 阅读 · 0 评论 -
设计模式:策略模式
首先什么是策略模式?它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的的客户。各个类的定义如下:抽象算法类: class Strategy{public: virtual void AlgorithmInterface()=0;} 具体算法类:class ConcreteStrategyA:public St原创 2009-09-02 18:37:00 · 647 阅读 · 0 评论 -
设计模式:简单工厂模式
简单工厂模式说简单点就是把创建对象的工作封装到一个类的方法中去。下面根据计算类来说明(源自于>)首先是操作的一个基类: class Operator{public: Operator(void); Operator (double _numberA,double _numberB):numberA(_numberA),numberB(_numberB){}publi原创 2009-09-01 23:04:00 · 763 阅读 · 0 评论 -
设计模式:组合模式
组合模式:将对象组合成树形结构以表示“部分-整体“的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性 一个例子:公司和公司部门的关系 //Company基类#ifndef COMPANY_H#define COMPANY_H#include using std::string;class Company{public: Compan原创 2009-09-19 15:35:00 · 1103 阅读 · 0 评论