![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Design Pattern
文章平均质量分 78
一路阳光随行
Happy to life
展开
-
原型模式
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:定义父类的Clone方法,申明为纯虚函数。重写父类类中的clone方法。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了转载 2015-11-23 14:00:19 · 453 阅读 · 0 评论 -
工厂模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建类模式工厂模式: 首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、本文所讲述的工厂方法模式、以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:可以使代码结构清晰转载 2015-11-20 15:17:41 · 485 阅读 · 0 评论 -
代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。UML图: Subject:声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。Proxy:代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何转载 2015-11-26 16:25:34 · 712 阅读 · 0 评论 -
访问者模式
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类图: 举例: 抽象访问转载 2015-11-24 14:45:19 · 371 阅读 · 0 评论 -
享元模式
定义:运用共享技术,有效的实现支持大量细粒度对象的复用 类图: 举个围棋的例子,围棋的棋盘共有361格,即可放361个棋子。现在要实现一个围棋程序,该怎么办呢?首先要考虑的是棋子棋盘的实现,可以定义一个棋子的类,成员变量包括棋子的颜色、形状、位置等信息,另外再定义一个棋盘的类,成员变量中有个容器,用于存放棋子的对象。下面给出代码表示:转载 2015-11-26 10:08:51 · 447 阅读 · 0 评论 -
策略模式
定义:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的对象类图: 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模转载 2015-11-25 14:27:27 · 405 阅读 · 0 评论 -
责任链模式
定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。类图: 其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的转载 2015-11-25 14:05:18 · 427 阅读 · 0 评论 -
单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做转载 2015-11-19 15:57:40 · 477 阅读 · 0 评论 -
设计模式
设计模式设计模式(Design pattern)是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。只有精通了设计模式,才敢说真正理解了软件工程。可以说,设计模式是每一个架构师所必备的技能之一。 总结了23种基本的设计模式。而这23中设计模式几乎涵盖了面向对象设计过程中所有问题的解原创 2015-11-19 14:42:06 · 481 阅读 · 0 评论 -
命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。类图:命令模式的结构 顾名思义,命令模式就是对命令的封装,首先来看一下命令模式类图中的基本结构: 客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确转载 2015-11-25 13:46:01 · 548 阅读 · 0 评论 -
备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态类图: 备忘录模式的结构发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。备忘录:负责存储发起人对象的内部状态,在需要的时候转载 2015-11-25 15:04:46 · 394 阅读 · 0 评论 -
迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类图: 迭代器模式的结构抽象容器:一般是一个接口,提供一个iterator()方法,具体容器:就是抽象容器的具体实现类,抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法n转载 2015-11-25 14:55:09 · 436 阅读 · 0 评论 -
观察者模式
定义:定义对象间一对多的依赖关系,当其中一个对象发生变化时,所有依赖于它的对象都会得到更新。类图: 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。观察者模式的结构在最基础的观察者模式中,包括以下四个角色:被观察者:从类图中可以看到,类中有一个用来存放观察者对象的Vect转载 2015-11-24 14:24:44 · 515 阅读 · 0 评论 -
中介者模式
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。类图:中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中转载 2015-11-23 15:26:05 · 451 阅读 · 0 评论 -
模板方法
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类图:模版方法模式的结构 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种:抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现。模版方法:由抽象类声明并加以实现转载 2015-11-23 14:46:46 · 504 阅读 · 0 评论 -
建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类图:四个要素产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。抽象建造者:引入抽象建造者的目的,是为了将建转载 2015-11-20 15:53:03 · 495 阅读 · 0 评论 -
组合模式
定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。类图: 在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们具备 完全一致的行为 接口转载 2015-11-25 15:35:00 · 487 阅读 · 0 评论