![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 60
wangwei129549
希望自己的努力可以实现自己简单的梦想
展开
-
解释器模式——化繁为简
(《设计模式解析与实战——何红辉,关爱民》读书笔记)这种模式并不多见,因为我们平时不需要去创造一条语法规则。所以对于大部分人来说,只需要知道其思想即可。一、定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 比如,给定一个语言(汉语),定义它的一种文法(主谓宾),然后定义一个解释器(翻译机,用来翻译汉语)。在计算机中,计算机可以实现四则运算,其实原创 2016-02-05 11:33:04 · 446 阅读 · 0 评论 -
原型模式——使程序运行更高效
(《设计模式解析与实战》读书笔记)一、定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象; 二、使用场景 (1)类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗; (2)通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可使用原型模式; (3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模原创 2016-02-02 14:30:41 · 302 阅读 · 0 评论 -
工厂方法模式——应用最广泛
(《设计模式解析与实战》读书笔记)一、定义 定义一个用于创建对象的接口,让子类决定实例化哪个类。它是创建型设计模式之一。 二、使用场景 在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。 三、工厂方法模式的通用模式代码/** * 抽象产品类 */public abstract class Product {原创 2016-02-02 14:47:01 · 348 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式 (《设计模式解析与实战》读书笔记)一、定义 为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。 二、使用场景 一个对象族有相同的约束。 举个例子:奔驰和奥迪都属于汽车(抽象工厂),这两种车有各自的工厂生产线(具体工厂),但每种车的型号又不相同(抽象产品),每种车的每种型号又有各自的生产线(具体产品)。 抽象工厂:声明了一组用于创建一种产品的方法,每一原创 2016-02-02 14:52:48 · 212 阅读 · 0 评论 -
策略模式
(《设计模式解析与实战》读书笔记)一、定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 二、使用场景 (1)针对同一类型问题的多种处理方式,仅仅是具体行为有差别时; (2)需要安全的封装多种同一类型的操作时; (3)出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时原创 2016-02-02 14:56:09 · 217 阅读 · 0 评论 -
装饰模式
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 比如,女人穿衣服,每天换着各种不同的衣服,但是不管穿成什么样,她还是她,其本质是不变的。二、使用场景 需要透明且动态的扩展类的功能时。三、装饰模式的通用代码/** * 抽象组件类:可以为一个接口或抽象类,其充当的就是被装饰的原始对象 */pub原创 2016-02-16 11:44:20 · 363 阅读 · 1 评论 -
状态模式——随遇而安
(《设计模式解析与实战》读书笔记)一、定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。也就是说行为由状态决定,不同的状态下有不同的行为。 二、使用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为; (2)代码中包含大量与对象状态有关的条件语句。例如,一个操作中含有庞大的多分支语句,且这些分支依赖于该对象的状态。 三、简单示例原创 2016-02-03 17:13:36 · 310 阅读 · 0 评论 -
享元模式——对象共享,避免创建多对象
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 使用共享对象可有效的支持大量的细粒度的对象。二、使用场景 (1)系统中存在大量的相似对象; (2)细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份; (3)需要缓冲池的场景三、简单示例 比如说回家买火车票,从北京到青岛短时间内有1万用户买票,那么北京到青岛的车票对象就会被创建1万次,当数据返回原创 2016-02-17 12:03:39 · 413 阅读 · 0 评论 -
责任链模式——使编程更有灵活性
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条线,并沿着这条链传递该请求,直到有对象处理它为止。 这类似于力的传递一样,一环套一环。 二、使用场景 (1)多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定; (2)在请求处理者不明确的情况下向多个对象中的一个提交一个请求原创 2016-02-04 10:20:16 · 341 阅读 · 0 评论 -
外观模式——统一编程接口
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式(Facade模式)提供一个高层次的接口,使得子系统更易于使用。二、使用场景 (1)为一个复杂子系统提供一个简单接口。子系统往往因为不断演化而变得越来越复杂,甚至可能被替换掉。大多数模式使用时都会产生更多、更小的类,在这使子系统更具可重复性的同时也更容易对子系统进行原创 2016-02-18 13:56:13 · 526 阅读 · 0 评论 -
桥接模式——多对多的连接
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 将抽象部分与实现部分分离,使它们都可以独立的进行变化。二、使用场景 (1)任何多维度变化类或者说多个树状类之间的耦合都可以使用桥接模式来实现解耦; (2)如果一个系统需要在构件的抽象角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,可以通过桥接模式使它们在抽象层建立一个关联关系; (3)对于那些不希望使用原创 2016-02-19 16:13:41 · 475 阅读 · 0 评论 -
Build模式——自由扩展
(《设计模式解析与实战》读书笔记)一、定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、使用场景: 1 相同的方法,不同的执行顺序,产生不同的事件结果时; 2 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时; 3 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用; 4 当初始化一个对象特别复杂,如参数多,且很多参数都具原创 2016-02-02 14:26:12 · 390 阅读 · 0 评论 -
单例模式
(《设计模式解析与实战》读书笔记)一、基本知识: 1、定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2、使用场景:某个类只有一个对象,避免产生多个对象消耗过多的资源;某种类型的对象有且只有一个。 3、关键点: (1) 构造函数为private; (2) 通过一个静态方法或者美剧返回单例类对象; (3) 确保单例类的对象有且只有一个; (4) 确保单例类对象在原创 2016-02-02 14:13:03 · 323 阅读 · 0 评论 -
命令模式——让程序畅通执行
一、定义 将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 比如说一键装机,用户只需要动一下鼠标,它就会执行下载,装机等一系列过程。二、使用场景 (1)需要抽象出待执行的动作,然后以参数的形式提出来——类似于过程设计中的回调机制,而命令模式正是回调机制的一个面向对象的替代品; (2)在不同的时刻指定、排列和执行请求。一个命令原创 2016-02-06 12:36:27 · 392 阅读 · 0 评论 -
观察者模式——解耦的钥匙
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 定义对象间同一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 比如。手机UI具有易变性,但业务逻辑基本变化不大,所以UI层需要与具体的业务逻辑解耦。二、使用场景 (1) 关联行为场景,关联行为是可拆分的,而不是组合关系; (2) 事件多级触发场景;原创 2016-02-07 16:24:16 · 668 阅读 · 0 评论 -
备忘录模式——编程中的后悔药
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可将该对象恢复到原先保存的状态。 比如,游戏的存档功能;Android中的onSaveInstanceState和onRestoreInstanceState;重做、撤销功能。二、使用场景 (1)需要保存一个对象在某一时刻的状态或部分状态; (2)如果原创 2016-02-08 12:12:02 · 357 阅读 · 0 评论 -
迭代器模式——解决问题的第三者
(《设计模式解析与实战——何红辉,关爱民》读书笔记)这个模式对开发者来说几乎不会自己去实现一个迭代器。所以对于这个模式更多的是在于理会其思想,而非应用。一、定义 提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。二、使用场景 遍历一个容器对象三、迭代器模式的通用模式代码/** * 迭代器接口:负责定义、访问和遍历元素的接口 * * @param <T> */原创 2016-02-09 11:05:02 · 480 阅读 · 0 评论 -
模板方法模式——封装固定流程
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 比如,生产线的流程,做物理题的固定思路、格式。二、使用场景 (1)多个子类有公有的方法,并且逻辑基本相同时; (2)重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现; (3)原创 2016-02-10 10:50:16 · 708 阅读 · 0 评论 -
访问者模式——数据操作与数据结构分离
(《设计模式解析与实战——何红辉,关爱民》读书笔记)大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是真的需要它了。一、定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。二、使用场景 (1)对象结构比较稳定,但经常需要在此对象结构上定义新的操作; (2)需要对一个对象结构中的对象进行很多不同的并且不相关的操原创 2016-02-11 12:05:10 · 1055 阅读 · 0 评论 -
中介者模式——调停者
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为 和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理原创 2016-02-12 14:34:09 · 542 阅读 · 0 评论 -
代理模式
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 为其他对象提供一种代理以控制对这个对象的访问。 比如,代理上网。二、使用场景 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。三、代理模式的通用模式代码package com.proxy.pattern;/** * 抽象主题类:主原创 2016-02-13 13:36:39 · 294 阅读 · 0 评论 -
组合模式——物以类聚
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 将对象组合呈树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 比如,总公司下设总公司行政部、总公司研发部和子公司,而子公司又下设子公司行政部和子公司研发部。二、使用场景 (1)表示对象的部分-整体层次结构时; (2)从一个整体中能够独立出部分模块或功能的场景。三、组合模式的通用模式代码 1、原创 2016-02-14 12:46:27 · 323 阅读 · 0 评论 -
适配器模式——媒婆
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 比如,最常见的ListView,需要使用Adapter来将数据和View绑定在一起。二、使用场景 (1)系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容; (2)想要建立一个可以重复使用的类,用于原创 2016-02-15 12:28:05 · 295 阅读 · 0 评论 -
MVC
(《设计模式解析与实战——何红辉,关爱民》读书笔记)一、简介 (来自维基百科) MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪8原创 2016-02-20 14:08:03 · 1860 阅读 · 0 评论