![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
Harrising
这个作者很懒,什么都没留下…
展开
-
Interpreter - 解释器模式
定义给定一个语言, 定于它的文法,并定义一个解释器,这个解释器使用改表示来解释语言中的句子。类型行为型模式案例像非常熟知的正则表达式就是描述字符串模式的一种标准语言,它为每一个模式都构造了一个特定的算法。AbstractExpression - 一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享原创 2014-07-16 08:06:54 · 665 阅读 · 0 评论 -
Template Method - 模板方法模式
目的定义一个操作中的算的骨架,将一些步骤的具体实现延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构就可以重新定义该算法的某些特定步骤。案例一个含有Application和Document类的应用框架,Application类负责打开一个外部文档,当文档中的内容读入之后,就用Document来表示。在Application中存在方法openDocumen原创 2014-07-26 17:14:19 · 666 阅读 · 0 评论 -
Decorator - 装饰模式
定义动态的给一个对象添加一些辅助功能,而不改变原有的类。案例假如现在有个文本控件TextView,它可以在屏幕上显示文字,但当文字过多的时候,一个屏幕显示不下,这时就需要给它添加一个滚动条。给一个窗口加一个滚动条不是原有的功能,而是额外的功能,比如还可以加一个黑色外框,而且这些操作不是为某一个控件设定的,其他的控件也可以用,如果用子类化来实现,就得不偿失了。使用原创 2014-07-07 19:52:25 · 437 阅读 · 0 评论 -
Facade - 外观模式
定义为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得子系统更加容易使用。案例比如现在有一个文件系统,它有很多的类,例如File,Directory,InputStream,OutputStream,ByteStream, NetworkAccess,Convertor等等,用这些类可以对文件进行打开,保存和转换,既可以在原创 2014-07-08 21:42:43 · 478 阅读 · 0 评论 -
Visitor - 访问者模式
目的在不改变某类层次结构中的各个类的前提下,定义作用于类中各元素的新操作。案例现在有不同的设备Equipment,例如:Chassis,FloppyDisk等等。有的人想了解它的性能,但有的人想了解它的价格,可能还有人想了解其他方面的信息,如制造商,制造材料等。但是当一个Equipment的的类定义好了,子类也定义好了之后,要增加新的操作,就需要改变所有的类,这原创 2014-07-26 20:44:20 · 507 阅读 · 0 评论 -
Chain of Responsibility - 职责链模式
定义使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度。案例比如现在有一个图形界面,它包括一个应用Application类,一个主窗口Window,一个按钮Button,Window和Button都是继承自Widget类,现在在Button上按滑动鼠标滚轮,Button类不一定要处理,可能是Window类处理,也可能是是Application类原创 2014-07-10 22:50:36 · 653 阅读 · 0 评论 -
State - 状态模式
定义允许一个对象在其内部状态改变时改变它的行为。案例比如一个表示网络连接的类TCPConnection,它有不同的状态:连接已建立(Established),正在监听(Listening),连接已关闭(Closed)。当这个TCPConnection收到其他对象请求时,根据自身不同状态做出不同的响应。使用State模式处理这类问题的时候,引入一个TCPStat原创 2014-07-24 21:03:24 · 923 阅读 · 0 评论 -
Flyweight - 享元模式
定义运用共享技术有效的支持大量细粒度的对象。案例Flyweight模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。比如要设计一个文档编辑器,就要处理很多的字符对象,如果为每一个字符都创建一个对象来管理,那代价是昂贵的。当输入一个“Hello”字符串的时候,可以看出有两个'l',这时候可以使用享元模式,只创建一个'l'字符,每一个用到的地方指向同原创 2014-07-09 21:42:16 · 478 阅读 · 0 评论 -
Adapter - 适配器模式
定义讲一个类的接口转换成需要的接口,使原本由于接口不兼容的类可以一起工作。案例比如现在有一个TextView类,它提供了图文的显示和编辑功能,但是现在有个绘图编辑器DrawingEditor,它支持不同种类图形Shape的绘制。为了不用重新去实现一个TextShape类,这里可以采用Adapter模式:上图中TextShape就是一个Adap原创 2014-07-06 15:11:49 · 732 阅读 · 0 评论 -
Command - 命令模式
定义将一个请求封装为一个对象,实现请求者与实施者的低耦合。案例大部分应用都存在很多的菜单和一些操作按钮,但在设计这些菜单和按钮的时候,并不知道它要执行什么样的操作。在设计删除、复制和撤销这些具体实现的时候,也不知道在要什么地方用到,可能是代码里面直接调用,也可能是界面上点击了某个按钮后发生的操作。为了解决菜单和具体操作的这种耦合度,就需要使用Command-命令原创 2014-07-11 21:42:22 · 1287 阅读 · 0 评论 -
Strategy - 策略模式
定义定义一系列的算法,把它们一个一个的封装起来,并且使它们可以相互替换,策略模式使得算法可以独立于使用者而变化。案例比如现在有一个文件编辑器Editor,它在保存的时候,可以保存为任意的格式。所有文件内容转换均由Convertor提供,根据不同的选择,提供不同内容转换支持:TXTConvertor,PDFConvertor,DOCConvertor等等。Edit原创 2014-07-25 21:03:24 · 584 阅读 · 0 评论 -
Composite - 组合模式
定义将对象组合成树型结构以表示“部分-整体”的层次结构。案例在我们的电脑中,文件加和文件就组成了我们的文件系统,文件夹之间可以互相包含,文件就像一个叶子节点,不能在包含其他的文件。要实现这样的关联,用普通的容器类来实现不好实现,它必须区别容器和内容,但是对于我们来说文件夹,文件的操作基本都是一样的,使用组合模式可以很好的实现:类图原创 2014-07-06 20:13:44 · 435 阅读 · 0 评论 -
Observer - 观察者模式
定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知。案例小明非常爱吃,吃得是非常之胖,他的医生小白建议他不要吃多了,但是他始终不听,吃到后面吃穷了。没有钱,但是他又想吃,这时候他就到处借钱。这不借了小黑500元,至今还没有还上。他的医生小白和小黑都那她没有办法,这时候小绿给他们想了一个办法,给了他们几件法宝,一件是Subjec原创 2014-07-24 19:57:25 · 438 阅读 · 0 评论 -
Iterator - 迭代器模式
定义提供一个方法顺序访问一个聚合对象中个各个元素,而又不需要暴露该对象的内部结构。案例一个聚合对象,如一个列表List,应该提供一种方法来让别人可以访问它的元素,而又不用暴露内部结构。迭代器模式可以很好的解决这类问题,关键思想就是将队列表的访问和遍历从列表对象中分离出来,放到一个迭代器Iterator对象中,Itrator定义了一个访问List对象的接口。原创 2014-07-20 22:41:50 · 784 阅读 · 0 评论 -
Mediator - 中介者模式
定义用一个中介对象来封装一系列的对象的交互。中介者使各对象不需要显示地相互使用,从而使其耦合松散,而且可以独立的改变他们之间的交互。案例比如有一个图像界面,在界面上有一个输入框LineEdit,有个一个列表框ListBox,有一个按钮Button。当输入框LineEdit没有内容的时候,按钮是灰显,不可用的,当在LineEdit输入了正确的选项后,ListBox原创 2014-07-21 22:10:37 · 704 阅读 · 0 评论 -
Memento - 备忘录模式
定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。案例比如现在有一个绘图系统,我们在Viewer里面画了一些图形,但是在绘制的过程中可能画出的图像不是想要的,这时候需要到正确的绘制状态,这时候可以在每次绘制的时候保存绘制的状态信息,但是要在不改变Viewer的封装性的前提下实现,有点困难,这原创 2014-07-22 23:03:14 · 595 阅读 · 0 评论 -
Abstract Factory - 抽象工厂模式
定义提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。目的抽象工厂模式针对的是多个抽象产品等级结构,而每一个抽象产品有多余一个的具体子类。比如要设计一款图形设计软件,要求它可以在不同的平台上运行,由于不同的平台界面风格有所不同,这时候就需要提供一个抽象的工厂类WidgetFactory,它提供了创建各种控件所需要的方法。对于不同的平台原创 2014-07-01 19:46:39 · 539 阅读 · 0 评论 -
Builder - 生成器模式
定义生成器模式是一步一步的创建一个复杂的对象,将一个复杂的对象的构建与它的表示分离,使得同样的构建过程构建不同的表示。案例设计一个文本编辑器,它可以把文件内容保存各种格式,比如doc、pdf、txt等。由于所支持的文件格式数目不一定,可能随时需要扩充,不能因为新增加了一种文件的支持,而改变这个编辑器。一种解决办法就是为这个编辑器提供Converter去做转换,无原创 2014-07-01 22:24:40 · 511 阅读 · 0 评论 -
Factory Method - 工厂方法模式
定义定义一个用于创建对象的接口,让子类决定具体实例化哪一个类,把一个类的实例化延迟到子类。案例现在有两种男人:程序员和其他男人,为了延续下一代,每个男人都需要找寻一个女人,但是每个男人都有每个男人的要求,有的要漂亮的,有的要有内涵的,有的要技术好的。这各种各样的女人就像一些列的产品,从Girl延伸出来的(Gril not woman),比如ThinGril、Fa原创 2014-07-02 21:36:15 · 432 阅读 · 0 评论 -
Prototype - 原型模式
定义用原型实例来指定创建对象的种类,通过拷贝原型来创建新的对象。案例比如,在设计纸币的时候,最初的设计图就是一个原型,以后在造纸币的时候,就不用再设计了,根据之前设计好的纸币直接复印就可以了。现在有一个抽象类Money,它是所有纸币的一个基类,带有一个复制功能clone(), 人民币Renminbi和Dollar都是从它继承而来。原创 2014-07-03 21:22:31 · 564 阅读 · 0 评论 -
Bridge - 桥接模式
定义将一个类的接口与实现分离,使之可以独立的变化。案例要定义跨平台的窗口Window,在不同的平台上它有不同的实现AWindow,BWindow等等,根据平台的数目就必须实现特定数目个子类,但是用户在使用的不会关心使用的是什么平台,这时使用桥接模式可以使之变得简单:Window类提供接口给用户,而它的实现由WindowImpl提供,可以减少代原创 2014-07-06 17:41:50 · 492 阅读 · 0 评论 -
SingleTon - 单例模式
定义保证一个类仅有一个实例,并提供一个能访问它实例的方法。案例在开发过程中,很多地方都会用到单例模式,比如一个打印机对象,一个缓存对象,一个资源管理器都会用到单例。单例模式的实现也非常简单:class SingleTon {public: static SingleTon* instance() { if (m_insta原创 2014-07-04 21:13:53 · 361 阅读 · 0 评论 -
Proxy - 代理模式
定义为其他对象提供一种代理以控制对这个对象的访问。案例对一个对象进行访问控制的原因在于只有确实需要这个对象的时候,才会进行创建和初始化。比如一个文件编辑系统,要打开一个文件,但是文件里边除了文字,还有许多的图片。而打开文件的时候,屏幕只有那么大,不一定能完整的显示。为了提升打开文件的速度,这时候不能显示的图片就可以延迟创建,在需要显示的时候才把它创建处对象,再显原创 2014-07-10 21:10:00 · 809 阅读 · 0 评论