一天一个设计模式
文章平均质量分 63
dleyy
这个作者很懒,什么都没留下…
展开
-
观察者模式
观察者模式是设计模式种较简单的,且挺常用的一种,主要用在事件发布系统中,当被观察者状态改变的时候,立即通知观察者。角色抽象被观察者角色:把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。具体被观察者角...原创 2018-12-26 13:38:00 · 206 阅读 · 0 评论 -
原型模式
概念 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此...原创 2019-01-06 17:05:46 · 171 阅读 · 0 评论 -
工厂方法模式
概念 工厂方法模式,就是用工厂生产对象的一种创建型模式,主要作用是把对象的创建交由子类进行。角色抽象产品:描述产品的的公共接口。具体产品:实现抽象产品。工厂类:根据传入的类型,选择不同的产品实现。Code抽象产品public interface Product { void product();}具体产品public class ProductA implements ...原创 2019-01-02 13:53:59 · 214 阅读 · 0 评论 -
桥接模式
概念 是用于把抽象化与实现化解耦,使得二者可以独立变化的结构型设计模式。借助菜鸟教程的一张图:这里就把形状和颜色解耦了,其实本来是要实现红色的圆和绿色的圆的,但这样解耦的好处是啥呢,就是我们要实现红色的矩形就会变的十分easy。只要再继承Shape实现一下矩形就ok了,而不需要单独实现红色矩形与绿色矩形。直接上代码这里我们就以笔和 颜色举例。抽象颜色接口,用于拓展颜色public...原创 2019-01-11 23:19:10 · 228 阅读 · 0 评论 -
适配器模式
概念 适配器模式是一种结构性模式,一般用于不兼容的情况出现时,比如笔记本电脑的电源适配器,就是转换电压的。代码同理,它结合了多个独立接口的功能。角色目标抽象类接口:定义所需的方法。适配器类:实现了目标抽象类接口。适配者类:包含目标类所需要使用的方法。举个例子 假如我们现在有两个类,一个类用来实现视频播放的(avi、mp4),一个类用来实现音频播放的,如mp3。假设我们现在有一个需...原创 2019-01-07 15:37:02 · 216 阅读 · 0 评论 -
组合模式
概念 就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。借用一张大佬的图举个例子抽象组合对象public abstract class Compositer { private St...原创 2019-01-12 16:23:09 · 182 阅读 · 0 评论 -
抽象工厂模式
概念 上一篇介绍了简单工厂,简单工厂是用来创建一个对象的,而抽象工厂则不同,他是用来创建一组对象的。角色抽象工厂:声明了一组用于创建一族产品的方法,每一个方法对应一种产品。具体工厂:它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。抽象产品:它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。具体产品:...原创 2019-01-03 13:51:07 · 176 阅读 · 0 评论 -
享元模式
概念 享元模式突出了对对象的"复用",主要用于减少创建对象的数量,以减少内存占用和提高性能。这是一种结构型设计模式举个例子 就以围棋棋子做例子,棋子只有黑色和白色的,不看他们所处的位置的话,黑色棋子和黑色棋子,白色棋子和白色棋子并没有本质上的区别。所以我们就可以分离出两个东西:外部状态: 与外部环境相关的,会具体变化的,本例种就是坐标位置。内部状态: 与外部环境无关,不会随环境变化而...原创 2019-01-13 15:27:43 · 168 阅读 · 0 评论 -
二十三种设计模式
到现在为止,二十三个设计模式一天一个已经搞完了,当然后续还是会继续完善的。感觉学了这些加深了我对代码的理解,比如观察者模式,迭代器模式。哈哈哈,也算是一种学习的激励吧。最后附一下代码地址,如果刚好你我有缘,看到了这篇文章,也需要源码的话,可以去这里下载一下瞅瞅。下一个专栏就准备搞flutter了。over...原创 2019-01-13 15:50:46 · 231 阅读 · 0 评论 -
装饰模式
概念 装饰模式是一种向已有的对象添加新功能的结构型模式,他创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。角色抽象构建:他是具体构建和抽象装饰者的共同父类,用于定义业务方法。具体构建:实现抽象构建的业务方法。抽象装饰者类:实现抽象构建,并维护一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的...原创 2019-01-08 16:58:24 · 181 阅读 · 0 评论 -
代理模式
概念 顾名思义,代理模式就是由一个类来代表另一个类的结构型设计模式。 作用: 为其他对象提供一种代理以控制对这个对象的访问。 这里主要介绍一下静态代理和动态代理角色Subject:抽象主题角色,申明具体主题以及代理主题共同的接口RealSubject:真实主题角色,实现业务操作Proxy:代理主题Code抽象主题/** * 抽象主题角色 * 申明具体主题以及代理主题共...原创 2019-01-09 16:57:31 · 175 阅读 · 0 评论 -
访问者模式
概念 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。角色先上一张图:抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。抽象元素类:接口或者抽象类,声明接受哪一类访问者访问。元素类:实现抽象元素类所声明的方法。结构对象:一个元素的容器...原创 2019-01-01 16:33:55 · 223 阅读 · 0 评论 -
建造器模式
概念 建造器模式,是一种使用多个简单对象构造成一个复杂对象的创建型模式。当然,我首先想到的就是Android 里面AlertDialog的创建。利用了AlertDialog.builder的方式,不过这里讲的建造器模式略微有些不同。角色抽象建造者:提供了一个创建产品Product的抽象方法以及build方法。具体建造者:继承抽象建造者,并实现方法,以及提供一个生成Product的方法。...原创 2019-01-05 13:10:00 · 264 阅读 · 0 评论 -
解释器模式
概念 既然是解释,就是把一个句子翻译成我们需要的数据的一种模式。书面化的解释是:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。文法:用于描述语言的语法结构的形式规则。角色抽象表达式:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。终结符表达式:是抽象表达式的子类,用来实现文法中与终结符相关的操作,文法中的每一...原创 2018-12-31 16:57:38 · 254 阅读 · 0 评论 -
策略模式
#概念 策略模式,顾名思义,就是有很多策略可供选择的一种模式。其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。#角色抽象策略角色:这个是一个抽象的角色,通常情况下使用接口或者抽象类去实现。具体策略角色:包装了具体的算法和行为。就是抽象策略角色的一组实现类。环境...原创 2018-12-26 13:46:00 · 153 阅读 · 0 评论 -
迭代子模式
概念 根据网上的介绍,迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。 但按照我的理解,迭代子模式主要是针对 “一堆” 数据进行访问的一种模式,比如Collection接口 和 Iterator接口。在Collection接口的具体实现类(如ArrayList)中实...原创 2018-12-26 13:49:07 · 271 阅读 · 0 评论 -
模板模式
概念 模板模式是设计模式中较简单的一种,主要是定义一个抽象的模板类,剥离出一些需要的公共方法。 通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。角色抽象模板类:具体的实现步骤以及需要的方法类。具体模板类:根据模板的...原创 2018-12-26 13:51:13 · 182 阅读 · 0 评论 -
责任链模式
概念 说到责任链模式,我就想起了okHttp中设置拦截器的时候了,今年、中外、开花,关注。 其实责任链就是将多个处理连接成一条链,然后处理一个对象,正常点的解释:使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。角色抽象责任:定义了具体的操作方式。具体责任:实现了抽象责任中的方法。处...原创 2018-12-26 13:53:18 · 216 阅读 · 0 评论 -
命令模式
概念 说到命令模式,我就想到了公司让开发产品的时候,这里就靠这个举个例子。先来段具体的定义:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。角色抽象命令:定义操作。具体的命令:完成操作。调用者:添加命令和执行。执行者...原创 2018-12-27 13:11:50 · 210 阅读 · 0 评论 -
备忘录模式
概念 说到备忘录,就想起打游戏时候的存档,还有各种软件的保存,ctrl+z回退,备忘录也差不多是这个样子。角色发起者:相当于游戏里面的当前角色的状态。备忘录(存档):保存着游戏的状态。管理者(存档管理):符合迪米特法则的,用来存储存档的类。Code 就模拟一下游戏存档与读取吧发起者/** * 发起人 * */public class Originator { pri...原创 2018-12-28 13:19:48 · 155 阅读 · 0 评论 -
状态模式
概念 状态模式,就是和对象的 状态相关的行为型模式。根据状态的不同,类的行为也不同。角色抽象状态类:定义了状态类的通用方法。具体状态类:实现抽象状态类。环境类:提供当前的状态和状态管理。上代码抽象状态类public interface State { void doAction(Context context);}具体状态类 这里实现后,把当前的状态设置给Contex...原创 2018-12-29 14:22:38 · 184 阅读 · 2 评论 -
单例模式
概念 顾名思义,就是无论如何,只让生成一个实例对象的模式了。本篇主要介绍几种单例模式的写法。懒汉式,线程不安全 最基本的实现,但最大的问题就是不支持多线程。public class LazeM { private static LazeM lazem; private LazeM(){} public static LazeM getInstance(){ if(la...原创 2019-01-04 11:45:09 · 171 阅读 · 0 评论 -
中介者模式
概念 说起中介者模式,就想起平时买房和租房的时候的中介,还有聊天室,中介者模式就和这些很像。我们靠一个中介者来处理类与类之间的交互关系。角色抽象中介者角色:定义了交互方式。具体中介者角色:实现了交互方式。抽象“对象类”:定义通用的操作。具体“对象类”:实现抽象"对象"类。上代码 就模拟一下聊天室聊天的代码,这里聊天室就是一个中介者类,因为大家都可以在里面讲话。这个例子比较简单,...原创 2018-12-30 16:51:32 · 210 阅读 · 0 评论 -
外观模式
概念 隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口的结构型设计模式。角色抽象外观角色:定义向客户端提供的接口。具体外观角色:实现抽象外观角色。子系统角色:实现子系统的功能,也可以是外观角色。Code比如我们开电脑,只要打开电源键就可以,但是电脑内部却不是,他还启动了CPU、启动内存、启动硬盘等等。这就是一个外观模式。电脑就相当于具体外观角色。抽象外观角色public...原创 2019-01-10 13:02:39 · 178 阅读 · 0 评论