随笔分类 - 设计模式
1
摘要:很久之前的设计模式系列漏掉了模板模式,现补上 概述 模板模式是一种行为型设计模式,它定义一个算法的骨架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。模板模式的主要目的是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势。 模板模式的主要结构包括: 抽象类(Abstract
阅读全文
摘要:在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价
阅读全文
摘要:中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 中介者模式是一种对象行为型模式,其主要优点如下。 降低了对象之间的耦合性,使得对象易于独立地被复用。 将对象
阅读全文
摘要:观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 观察者模式是一种对象行为型模式,其主要优点如下。 降低了目标与观察者之间的耦合关系,两
阅读全文
摘要:状态模式对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式,其主要优点如下。 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。 减少对象间的相互依赖。将不同的状
阅读全文
摘要:在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来
阅读全文
摘要:责任链模式实现为请求创建了一个接收者对象的链。当请求的直接执行者无法实现请求时,会将请求传递给链的上一级进行处理。这种传递往往可以通过让接收者包含另一个接收者的引用的方式实现。 责任链模式是一种对象行为型模式,其主要优点如下。 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其
阅读全文
摘要:命令模式将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 实际上,命令模式就是实现请求和执行者之间的解耦。图中Invoker实现接受和管理各种命令,然后统一向Receiver发起请求,所有类型的请
阅读全文
摘要:组合模式,将对象组合成属性结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。其UML图如下: 主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。如何解决:树
阅读全文
摘要:享元模式指通过共享的技术来支持大量细粒度对象的复用,它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。例如围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它
阅读全文
摘要:外观模式: 为子系统中的一组接口定义一个一致的界面,外观模式提供了一个高层接口,这个接口使得这一子系统更加容易被使用;对于复杂的系统,系统为客户提供一个简单的接口,把复杂的实现过程封装起来,客户不需要了解系统内部的细节。 主要解决:客户不需要了解系统内部复杂的细节,只需要一个接口;系统入口。 如何解
阅读全文
摘要:当设计的class具有多个维度的属性,用单继承的方式进行设计会造成设计出的子类很多,分类困难。 桥接模式将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 桥接模式的的特点: 1.扩展能力强,实现和继承分离。 2.其实现细节对客户透明
阅读全文
摘要:参考:http://c.biancheng.net/view/1354.html 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变
阅读全文
摘要:参考:https://www.cnblogs.com/carsonzhu/p/5774616.html 尽管和工厂模式相类似是创建型设计模式的一种,原型模式本身与工程设计模式本身并没有什么关系,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。 原型模式的应用场景
阅读全文
摘要:装饰者模式的作用在于动态地为某一个类添加额外的功能,通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。 适用场景: 1.需要扩展一个类的功能,或给一个类添加附加职责。 2.需要动态的给一个对象添加功能,这些功能可以再动态的撤销。 3.需要增加由一些基本功能的排列组合而产
阅读全文
摘要:参考:https://blog.csdn.net/lh844386434/article/details/18045671 代理模式指为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离。 Subject: 抽象角色。声明真实对象和代理对象的共同接口。Proxy: 代理角色。代
阅读全文
摘要:参考:http://blog.jobbole.com/109381/ 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹
阅读全文
摘要:策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式来封装算法,效果比较好。 本文以自己实际项目中策略模式的实际应用为例:实现无人驾驶车辆的定位有两种方
阅读全文
摘要:本篇介绍单例模式,可以说是使用场景最频繁的设计模式了。可以根据实例的生成时间,分为饿汉模式和懒汉模式 饿汉模式:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。 懒汉模式:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化 一.饿汉模式 1.c++ 线程安全
阅读全文
摘要:本篇开始记录实现设计模式在工作中的两种常见语言上的实现。 本篇介绍最简单的工厂模式。 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。从软件开发的角度来说,这样就有效的降低了模块之间的耦合。 使用
阅读全文
1