
设计模式学习
Liu-Eleven
纸上得来终觉浅,绝知此事要躬行。
展开
-
设计模式总结二
设计模式七大原以及23种设计模式分类:原创 2020-06-16 09:12:59 · 261 阅读 · 0 评论 -
大话设计模式中的总结
背景介绍嘉宾:面向对象思想抽象封装继承多态评委:单一职责开放封闭依赖倒转里氏替换合成复用迪米特类型:创建型模式结构性模式行为型模式创建型比较标题为什么需要创建型模式?抽象工厂:答:创建型模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建型模式在创建了什么、谁创建它、它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性[DP1。原型模式:答:当一个系统应该独立于它的产品创建、构成和表示时,应该考虑原创 2020-06-16 09:03:13 · 432 阅读 · 0 评论 -
设计模式之访问者模式
介绍Visitor——抽象访问者 抽象类或者接口, 声明访问者可以访问哪些元素, 具体到程序中就是visit方法的参数定义哪些对象是可以被访问的。 ConcreteVisitor——具体访问者 它影响访问者访问到一个类后该怎么干, 要做什么事情。 Element——抽象元素 接口或者抽象类, 声明接受哪一类访问者访问, 程序上是通过accept方法中的参数来定义的。 ConcreteElement——具体元素 实现accept方法, 通常是visitor.visit(this), 基本上都原创 2020-06-13 09:43:36 · 335 阅读 · 0 评论 -
设计模式之 《解释器模式》
介绍 解释器模式(interpreter),给定一一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。[DP]Context 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。 AbstractExpresslon 解釋器抽象类。 TerminalExpression 解释器具体实现类。优点:很容易地改变和扩展文法,因为该模式使用类来表示文法规则,你可使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象...原创 2020-06-12 09:30:09 · 279 阅读 · 0 评论 -
设计模式之 《享元模式》
介绍享元模式(Flyweight), 运用共享技术有效地支持大量细粒度的对象。[DP]享元式中, 有如下3个角色:Flyweight抽象享元角色:。 所有具体享元类的父类,规定- -些需要实现的公共接口。 ConcreteFlyweight具体享元角色。 抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。 FlyweightFactory享元工厂角色: 负责创建和管理享元角色。优点:是以共享的方式,高效的支持大量的细粒度的对象使用:如果一个应用程序使用了大量的对象,而大量原创 2020-06-11 09:49:35 · 293 阅读 · 0 评论 -
设计模式之《中介者模式》
介绍Mediator抽象中介者角色 抽象中介者角色定义统一的接口, 用于各同事角色之间的通信。 Concrete Mediator具体中介者角色 具体中介者角色通过协调各同事角色实现协作行为, 因此它必须依赖于各个同事角色。 Colleague同事角色 每一个同事角色都知道中介者角色, 而且与其他的同事角色通信的时候, 一定要通过中介者角色协作。每个同事类的行为分为两种:自发行为(Self-Method):同事本身的行为, 比如改变对象本身的状态, 处理自己的行为等,与其他的同事类...原创 2020-06-10 10:10:32 · 366 阅读 · 0 评论 -
设计模式之“职责链模式”
介绍抽象处理者 Handler 定义一个请求的处理方法handleMessage,唯一对外开放的方法;定义一个链的编排方法setNext,设置下一个处理者;定义了具体的请求者必须实现的两个方法:定义自己能够处理的级别getHandlerLevel和具体的处理任务echo 具体处理者ConcreteHandler 实现抽象方法 请求发出者Client 发出请求优点:请求和处理分开缺点:性能问题,每个请求都是从链头遍历到链尾,特别是在链比较长的时候。 调试不很方便,采用了类似递归的..原创 2020-06-09 10:50:13 · 285 阅读 · 0 评论 -
设计模式之 《命令模式》
介绍Receive接收者角色 该角色就是干活的角色, 命令传递到这里是应该被执行的。作为抽象类,定义一个可接受消息的抽象类,从而保证多个不同的具体角色均可接受命令 Command命令角色 需要执行的所有命令都在这里声明。定义抽象类一个和一系列具体命令类,每个类对应一个命令。 Invoker调用者角色 接收到命令, 并执行命令。优点:类间解耦、可扩展性 、命令模式结合其他模式会更优秀缺点:如果有N个命令,Command的子类就是N个UML类图:简单示例:#ifndef..原创 2020-06-08 11:02:27 · 316 阅读 · 0 评论 -
设计模式之 《桥接模式》
介绍概念: Bridge模式又叫做桥接模式,是构造型的设计模式之- -。Bridge模式基于类的最小设计 原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是 把抽象(abstraction 与行为实现(implementation)分离开来,从而可以保持各部分的独 立性以及应对它们的功能扩展。Abstractione 抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用。 Ref...原创 2020-06-06 10:31:48 · 313 阅读 · 0 评论 -
合成/聚合复用原则
合成(Composition,也有翻译成组合)和聚合(Aggregation)都是关联的特殊种类。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期-样[DPE]。比方说,大雁有两个翅膀,翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。而大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雁和雁群是聚合关系。”.原创 2020-06-06 09:17:28 · 536 阅读 · 0 评论 -
设计模式之 单例模式
介绍几个重点:构造函数为private 提供一个获取单例对象指针的函数 一个静态指针成员存储单例对象注意:获取单例对象也可以获取对象引用,但要注意拷贝构造函数和赋值运算符 如果有多线程访问单例,需要注意线程同步UML类图:简单示例:懒汉和饿汉模式:#ifndef SIMPLE_SINGLETON_H#define SIMPLE_SINGLETON_H#include <iostream>using namespace std;/** *.原创 2020-06-05 10:28:32 · 341 阅读 · 0 评论 -
设计模式之《迭代器模式》
介绍迭代器模式(Iterator),提供-种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。[DP]属于行为型模式之一。Aggregate:抽象类集合Iterator(迭代器接口):该接口必须定义实现迭代功能的最小定义方法集。比如提供hasNext)和next()方法。。Concretelterator (迭代器实现类):迭代器接口Iterator的实现类。可以根据具体情况加以实现。优点:分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合.原创 2020-06-04 16:39:04 · 253 阅读 · 0 评论 -
设计模式之《组合模式》
介绍组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。[DP]属于结构型模式之一。Component抽象构件角色 定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性。 Leaf叶子构件 叶子对象, 其下再也没有其他的分支, 也就是遍历的最小单位。 Composite树枝构件 树枝对象, 它的作用是组合树枝节点和叶子节点形成一个树形结构透明组合模式中,抽象构件Component中声明了所有原创 2020-06-03 18:18:26 · 420 阅读 · 0 评论 -
设计模式学习之备忘录模式
介绍备忘录(Memento):在不破坏封装性的前提下,捕获- - 个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。Originator发起人角色 记录当前时刻的内部状态, 负责定义哪些属于备份范围的状态, 负责创建和恢复备忘录数据。 Memento备忘录角色 负责存储Originator发起人对象的内部状态, 在需要的时候提供发起人需要的内部状态。 Caretaker备忘录管理员角色 对备忘录进行管理、 保存和提供备忘录。应用:需要保存和恢复数原创 2020-06-02 11:17:50 · 330 阅读 · 0 评论 -
设计模式之 《适配器模式》
介绍适配器模式就是把一个接口或类转换成其他的接口或类。该模式隶属于 {结构型模式}Target目标角色 该角色定义把其他类转换为何种接口,也就是我们的期望接口。Adaptee源角色 它是已经存在的、 运行良好的类或对象。Adapter适配器角色 适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色。优点:适配器模式可以让两个没有任何关系的类在一起运行;增加了类的透明性;提高了类的复用度;灵活性非常好应...原创 2020-05-29 09:19:23 · 340 阅读 · 0 评论 -
设计模式之状态模式学习
介绍结构:State——抽象状态角色 接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换。 ConcreteState——具体状态角色 每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状态处理,通俗地说,就是本状态下要做的事情,以及本状态如何过渡到其他状态。 Context——环境角色 定义客户端需要的接口,并且负责具体状态的切换。 环境角色有两个不成文的约束: 把状态对象声明为静态常量, 有几个状态对象就声明几个静态常量。 环境角色具有状态抽象角色定义的所有行为原创 2020-05-23 11:23:59 · 349 阅读 · 0 评论 -
抽象工厂模式学习
介绍抽象工厂模式主要有四个关键元素:抽象产品(Product):负责定义产品的共性,实现对事物最抽象的定义。 具体产品(ConcreteProduct):具体产品可以由多个。 抽象工厂(Factory):工厂类必须实现这个接口,负责定义产品对象的产生。 具体工厂(ConcreteFactory):具体如何产生一个产品的对象,一个具体工厂与一个具体产品一一对应。优点良好的封装性, 代码结构清晰 工厂方法模式的扩展性非常优秀 。 在增加产品类的情况下, 只要适当地修改具体的工厂类或扩展一个原创 2020-05-22 08:19:22 · 301 阅读 · 0 评论 -
设计模式之 观察者模式(Publish/Subscribe)模式
介绍观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。[DP]Subject被观察者 定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。 Observer观察者 观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理。 ConcreteSubject具体的被观察者原创 2020-05-19 08:47:39 · 550 阅读 · 0 评论 -
建造者模式学习
介绍建造者模式中, 有如下4个角色:Product产品类 通常是实现了模板方法模式, 也就是有模板方法和基本方法 Builder抽象建造者 规范产品的组建, 一般是由子类实现。 ConcreteBuilder具体建造者 实现抽象类定义的所有方法, 并且返回一个组建好的对象。 Director导演类 负责安排已有模块的顺序, 然后告诉Builder开始建造。优点:封装性;建造者独立,容易扩展;便于控制细节风险使用:相同的方法,不同的执行顺序具有不同结果; 多个部件或零件,都.原创 2020-05-15 09:00:50 · 311 阅读 · 0 评论 -
外观模式学习
介绍Facade外观模式(有的也叫门面) 定义:Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的 简单的界面被称作facade。 客户端可以调用这个角色的方法。 此角色知晓子系统的所有功能和责任。 一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去, 也就说该角色没有实际的业务逻辑, 只是一个委托类。 subsystem子系统角色 可以同时有一个或者多个子系统。 每一个子系统都不是一个单独的类, 而是一个类的集合。 子系统并不知原创 2020-05-14 08:39:08 · 390 阅读 · 0 评论 -
模板方法模式
介绍Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为模板方法模式是由抽象模板和具体模板构成,抽象模板分为两类基本方法:基本操作,有子类实现的方法,在模板方法中被调用 模板方法:可以由一个或多个,是一个具体的方法,也就是一个框架,实现对基本方法的掉队,完成固定的逻辑。为了防止恶意的操作一般模板方法都加上final关键字不允许被覆写具体模板实现抽象模板,但只覆写基本方法优点原创 2020-05-12 10:39:12 · 289 阅读 · 0 评论 -
原型模式
介绍原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。核心:是提供一个clone方法,通过该方法进行对象的拷贝。优点:性能优良;逃避构造函数的约束缺点:每个类都要重写有clone方法,对于以后的类需要全面的考虑所有成员的拷贝应用:一个复杂对象多个修改者的场景,该对象应该具有自我复制功能,统一一套接口。资源优化场景、性能...原创 2020-05-08 22:24:41 · 253 阅读 · 0 评论 -
C++设计模式之《代理模式》
简介:通过代理模式可以在原有业务逻辑外增加一定的约束,比如排序、范围限制等等,无论具体主体还是代理主体都实现抽象主题Subject抽象主题角色 抽象主题类可以是抽象类也可以是接口, 是一个最普通的业务类型定义, 无特殊要求。 RealSubject具体主题角色 也叫做被委托角色、 被代理角色。业务逻辑的具体执行者。 Proxy代理主题角色 也叫做委托类、 代理类。 它负责对真实角...原创 2020-04-29 08:34:52 · 487 阅读 · 0 评论 -
设计模式之《装饰模式》
问:现有类 A,如果想对类A进行功能增强,有几种方法?答:在C++种,常用的3种,分别是:直接修改类A的代码。但是不符合开闭原则 使用继承,让派生类B来扩充类A的功能 使用关联/组合的方式,让类C包含类A,然后对A进行增强(装饰模式基于此方法)装饰模式: 装饰模式(Decorator Pattern)是动态的给一个对象添加一些额外的职责,就增加功能来说,此模...原创 2020-04-21 08:45:13 · 393 阅读 · 0 评论 -
设计模式之《简单的工厂模式和工厂模式》
工厂模式和简单工厂模式比较:UML图:简单的工厂模式原创 2020-04-14 09:31:31 · 394 阅读 · 0 评论 -
设计模式之《简单工厂模式》
简单的工厂模式简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式不属于23种GOF设计模式之一。实现方式(附图)简单工厂模式的UML类图(见右图)简单工厂模式的实质是由一个工厂类根据传入的参...原创 2020-04-13 09:30:08 · 322 阅读 · 0 评论 -
《大话设计模式》之策略模式
大话设计模式之策略模式商场促销UML类图客户端实现方式策略模式解析商场促销先上一张图,用Qt/C++实现大话设计模式中第二章的商场促销UML类图<策略模式><简单的工厂模式>客户端实现方式简单工厂模式 CashSuper *cs = CashFactory::createCashAccept(m_comboxIndex); double to...原创 2020-04-03 10:04:03 · 368 阅读 · 0 评论 -
设计模式之 《策略模式》
策略模式(Strategy)意图:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装成一个一个的类,任意地替换。优点:1、 策略模式提供了管理相关的算法...原创 2020-03-31 09:49:22 · 327 阅读 · 0 评论 -
设计模式之七大原则
从今天起,以后每天学一点点设计模式的知识,同时把自己的学习记录在csdn记录下来,亦分享,亦查阅。 ...原创 2020-03-11 08:35:24 · 355 阅读 · 0 评论