随笔分类 - 设计模式
摘要:花了近一个月的时间,终于将Java 设计模式全部整理完毕。为了日后方便阅读回顾,按照模式类型整理如下 先介绍了设计模式的原则: 设计模式学习笔记(一)设计模式六大原则 一、创建型模式(Creational Pattern) 创建型关注的是对象的创建过程,描述的是如何将对象的创建和使用分离,对用户隐藏
阅读全文
摘要:解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。 比如说在计算器中,我们输入一个加法/减法表达式(中缀表达式)“1+6-5”字符串,
阅读全文
摘要:访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。借用《Java设计模式》中的例子说明:在医院医生开具药单后,划价人员拿到药单后会根据药单上的药品名称和数量计算总价,而药房工作人员则
阅读全文
摘要:状态模式(State Pattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统的开发中: 有限状态机(Finite State Machine,FSM),状态机有三个组成部分:状态(State)、事件(Eve
阅读全文
摘要:观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式。指在对象之间定义一个一对
阅读全文
摘要:备忘录模式(Memento Design Pattern),也叫快照(Snapshot)模式。指在不违背封装原则前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。 备忘录模式在日常中很常见,比如Word中的回退,MySQL中的undo log日志,Git版本管
阅读全文
摘要:中介者(Mediator)模式指定义了一个单独的中介对象,来封装一组对象之间的交互。即将这组对象之间的交互委派给中介对象,从而来避免对象之间的直接交互。比如我们各种设备之间的通信,就是通过服务器作为中介对象来进行交互: 一、中介者模式介绍 中介者又叫做调停模式,是一种对象行为型模式,它降低了对象之间
阅读全文
摘要:迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。这就是迭代器模式的 一、迭代器模式介绍 迭代器模式也就是提供一个对象来顺序访问聚合对象中
阅读全文
摘要:命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。 一、命令模式介绍 命令模式将发送者与接受者完全解耦,发送者与接收者之间没有
阅读全文
摘要:责任链模式(Chain Of Responsibility Design Pattern),也叫做职责链,是将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 一、责任链模式介绍 其实在日常生活中,有不少使用责任链的场景。比如公
阅读全文
摘要:组合(Composite)模式,又叫做树形模式,主要用来处理树形结构数据。是将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。让客户端可以统一单个对象和组合对象的处理逻辑。 一、组合模式介绍 组合模式通过以树形结构来表示“部分-整体”,使得用户对叶对象和组合对象的使用具有一致性。也就是说
阅读全文
摘要:享元(Flyweight)模式:顾名思义就是被共享的单元。意图是复用对象,节省内存,提升系统的访问效率。比如在红白机冒险岛游戏中的背景花、草、树木等对象,实际上是可以多次被不同场景所复用共享,也是为什么以前的游戏占用那么小的内存,却让我们感觉地图很大的原因。 一、享元模式介绍 1.1 享元模式的定义
阅读全文
摘要:外观(Facade)模式,又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问的模式。比如说我们日常生活中医院的分诊台,就是实现统一访问接口的特性: 一、外观模式介绍 外观模式提供一个统一接口,用来访问子系统的一系列接口,从而让子系统更容易使用。这个子系统可以有
阅读全文
摘要:装饰器(Decorator)模式:指不改变现有对象结构的情况下,动态地给该对象增加额外功能。 一、装饰器模式介绍 装饰器模式允许向一个现有的对象添加新的功能,同时不改变其结果。比如Java 中的IO框架中,FileInputStream(处理文件)、ByteArrayInputStream(处理字节
阅读全文
摘要:桥接(Bridge)模式是指将抽象部分与实现部分相分离,使它们都可以独立的发生变化。 一、桥接模式介绍 我们知道,抽象部分一般与实现部分连接有两种方式:继承和实现。那么如何将其解耦分离,桥接模式提供一种方式,也就是将强关联转为弱关联,将继承转换为组合关系。如下图所示,取消两者的继承关系,改用组合关系
阅读全文
摘要:适配器模式(Adapter)指的是将一个类的接口转换成另一个可以兼容的接口。比如我们日常生活中的转换头、古早时期使用的电池万能充,就相当于程序中使用的适配器模式。 一、适配器模式的介绍 1.1 适配器模式的结构 适配器模式模式主要分为类结构型模式和对象结构型模式两种: 1.1.1 类适配器模式 类适
阅读全文
摘要:代理模式(Proxy Design Pattern)是为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。 一、代理模式介绍 在结束创建型模式的讲解后,从这一篇开始就进入到了结构型模式,结构型模式主要是总结一些
阅读全文
摘要:原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。 一、原型模式介绍 原型设计
阅读全文
摘要:一、建造者模式介绍 1.1 建造者模式的定义 建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。 也就是通过多个简单对象组装出一个复杂对象的过程,比如机器人需要多步简单的组装、装修需要各个子
阅读全文
摘要:单例模式可以说是Java中最简单的设计模式,也是技术面试中频率极高的面试题。因为它不仅涉及到设计模式,还包括了关于线程安全、内存模型、类加载等机制。所以下面就来分别从单例模式的实现方法和应用场景来介绍一下单例模式 一、单例模式介绍 1.1 单例模式是什么 单例模式也就是指在整个运行时域中,一个类只能
阅读全文