设计模式
听风丨说话
这个作者很懒,什么都没留下…
展开
-
设计模式之----责任链模式
闲来无事,回顾一下设计模式,顺手记录下。 责任链模式:多个处理者都有可能处理事件,从而避免发送者和接收者之间的耦合关系。将这些处理者形成一条链,沿着这条链,传递事件的请求,直到处理者将该事件处理为止。几个名词解释 这里用的都是大白话处理者:能够消费事件的对象链:当前处理者对象有下一个处理者对象的引用,能够进行事件传递发送者:将处理者组织成链条,并将事件传递给接收者(第一个处理者)处原创 2017-09-27 11:33:23 · 318 阅读 · 0 评论 -
设计模式之----策略模式(ListAdapter和TimeInterpolator源码分析)
一、定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式让算法独立于使它的客户独立而变化。 策略模式的重点不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。二、角色2.1 环境(Context)角色 该角色持有一个Stragtegy的引用,可以执行Stragtegy的方法2.2 抽象策略(Stra原创 2017-11-02 16:47:15 · 724 阅读 · 0 评论 -
设计模式之----解释器模式
一、定义 给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。解释器是一种用的比较少的行为模式,其提供了一种解释语言的语法,或者表达式的方式。该模式定义了一个表达式的接口。二、实际运用正则表达式,比如,判断是否是手机号的正则:"^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"xml解析sql语句的执行三、原创 2017-10-26 00:25:36 · 395 阅读 · 0 评论 -
设计模式之----模板方法模式(AsyncTask源码解析)
一、定义 定义一个操作中的算法骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 这里跟工厂方法模式很像,工厂方法模式的定义是:工厂方法模式去掉了工厂中的静态创建方法,定义为抽象方法,使得子工厂可以继承实现该方法,创建具体对象。我的工厂模式文章链接:工厂方法模式 工厂方法模式和模板方法模式区别:一个是把对象原创 2017-10-26 10:56:26 · 482 阅读 · 0 评论 -
设计模式之----迭代器模式
一、 定义 提供一种方法顺序访问一容器对象中的各个元素,而又不需要暴露该对象内部的表示。二、 角色抽象迭代器(Iterator):定义遍历元素所需方法。具体迭代器(ConcreteIterator):实现具体的遍历方法抽象容器(Aggregate):提供iterator()方法的抽象父类或者接口。具体容器类(ConcreteAggregate):具体容器实现类,实现iterator()原创 2017-11-13 16:36:12 · 487 阅读 · 0 评论 -
设计模式六大原则之----里氏替换原则
一、定义 所有引用基类的地方,必须能透明的使用其子类对象。通俗的说:遵循里氏替换原则的代码,只要父类出现的地方就可以使用子类来替换它而不会产生任何错误,使用者不需要知道用的是父类还是子类。 它的核心是继承友情提醒:xmind导出的图片有点模糊,请方法查看二、优缺点 它的核心是继承,它的优缺点也是继承的优缺点2.1 优点代码共享:子类拥有父类的属性和方法重用性:子类重用父类的代码原创 2017-11-14 21:24:30 · 832 阅读 · 0 评论 -
设计模式六大原则之----单一职责原则
一、定义 规定一个类只有一个发生变化的原因。通俗理解为:一个类只负责一项职责。 友情提醒:xmind导出的图片有点模糊,请方法查看二、 问题的由来2.1 问题 类T负责两个不同的职责,当职责P1改变需求时需要修改T类,这时候就有可能因为修改的逻辑导致职责P2出现故障2.2 解决方案 遵循单一原则,创建两个类T1和T2,在修改T1的时候不会影响T2,同理,修改T2的时候也不影响T1的逻原创 2017-11-14 19:40:53 · 410 阅读 · 0 评论 -
设计模式六大原则之----接口隔离原则
一、定义 建立单一的接口,功能尽量细化, 不要建立臃肿的接口。不依赖不需要的接口,剔除不需要的接口最小接口,对接口进行细化,方法数最少友情提醒:xmind导出的图片有点模糊,请放大查看 二、 问题的由来2.1 问题 如下图,类C和类D分别实现接口I,I中有5个方法,在子类Class C中只需要用到1、2、3,但确需要实现所有方法;在子类Class D中,本来只需要用到4、5,也需原创 2017-11-20 20:10:02 · 862 阅读 · 0 评论 -
设计模式六大原则之----迪米特、开闭原则(六大原则简单总结)
由于迪米特和开闭原则不具体写代码逻辑,同时,这两个原则部分思想是和前面的4个原则有重合部分,所以就在一起来回顾。一、 迪米特原则1. 定义 也叫最少知识原则,一个对象应该对其他对象有最少的了解,即一个类对自己需要耦合或者调用的类知道的最少。2. 生活实例看代码生活实例:有些朋友间距离太近,无话不说,无所不知,类A和类B两个人配合非常默契,如果某一天其中一个人无法和另一个人配合,而用第三个人原创 2017-11-20 21:06:15 · 1266 阅读 · 0 评论 -
# 设计模式之----命令模式
一、背景该模式出现是为了解决一些问题:解耦,以达到对修改封闭,对扩展开放的原则(开闭原则);命令组合实现功能。二、定义 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日子,以及支持撤销的操作。 本例以录音机播放和暂停为例: 普通模式:按下键盘,调用录音机去播放或者暂停(需要写不同的分支,耦合度高,扩展时需要直接改动这部分原创 2017-10-25 11:05:27 · 451 阅读 · 0 评论 -
设计模式之----建造者模式(AlertDialog源码分析)
1. 简单例子建造房子可以认为是一个建造者模式的实际场景。建房可以包括,建造地板、墙,房顶等。(每间房子都是这样的一个建造顺序,但细节是有区别的)2. 定义 将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 (使用多个简单的对象一步一步构建成一个复杂的对象) 例子:比如肯德基有很多套餐,同样都是由汉堡、饮料、薯条、甜筒组成,但他们的口味,价格都不一样。原创 2017-10-22 22:12:14 · 1063 阅读 · 0 评论 -
设计模式之----简单工厂模式
简单工厂模式 提供创建对象的功能,不需要关心具体的实现,降低调用端和模块的耦合度(最少知识原则)接口实现多态的场景的例子1. 普通实现(将子类的实现指向父接口)Api api = new ApiImplA();1.1 存在的问题 如果这个类是设计给别人使用,假如存在多个实现类,那么,我需要告知使用者,各个实现类分别是什么功能等等,他才能够使用。1.2 改进 使用简单工厂模式,使用常原创 2017-10-09 23:16:05 · 298 阅读 · 0 评论 -
设计模式之----工厂方法模式
比如我要一个手机,我可以直接把钱给厂商,他就能造一个手机给我,我不需要关心手机是如何造出来的,这是简单工厂模式。如果,我今天要一部小米,明天要一部三星,后天要一部苹果,那么我的简单工厂内部逻辑就需要一直修改,这就违背了开闭原则(对扩展开放,对修改封闭)–这就引申出我们今天的工厂方法模式。1、定义 工厂方法模式去掉了工厂中的静态创建方法,定义为抽象方法,使得子工厂可以继承实现该方法,创建具体对象原创 2017-10-10 12:59:00 · 367 阅读 · 0 评论 -
设计模式之----观察者模式(Listview刷新原理分析)
一、 定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。二、角色抽象主题角色(Subject)抽象主题角色把所有观察者对象的引用保存到一个聚集里(例如ArrayList对象),每个主题都可以有任何数量的观察者。抽象主题提供增加、移除观察者对象的方法。也叫抽象被观察者角色。具体主题原创 2017-10-26 23:45:33 · 585 阅读 · 0 评论 -
设计模式之----原型模式
1. 概念 用原型的实例指定创建的种类并通过拷贝这些原型创建新的对象。 通俗:复制一模一样的对象出来。 目的:保护最原始的那一份存档,隐藏复制的过程。 2. 原理在需要跟当前对象一模一样的对象时,直接使用该对象的克隆方法,避免手动去new对象,再逐一进行赋值等操作(这样就把复制过程隐藏)。同时,改变新的对象不会对原来的数据造成影响。3. 代码示例 非重写c原创 2017-10-10 17:30:08 · 295 阅读 · 0 评论 -
设计模式之----单例模式
1. 定义 一个类仅有一个实例,并且自行实例化,向整个系统提供。关键点:仅有一个实例自己创建该实例能够给调用者提供仅有的实例2. 单例的实现方式 单例实现从以下几个方面来对比 是否能够在使用时加载? 线程是否安全? 是否易用、易理解? 2.1 饿汉式 类加载时创建自身实例,线程安全。/** * 饿汉式 * 1.原创 2017-10-10 23:26:25 · 414 阅读 · 0 评论 -
设计模式之----状态模式
友情提示:xmind导出的图片分辨率比较小,缩放查看。一、定义 当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式是对象的行为模式。二、角色环境(Context)角色 上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个定义了对象的当前状态抽象状态(State)角色 定义一个接口,用以封装环境(Context)原创 2017-10-28 15:58:32 · 638 阅读 · 0 评论 -
【翻译】Android中的AOP编程
【翻译】Android中的AOP编程 翻译自:https://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/ AOP介绍; AspectJ 是在 Android 应用介绍; AspectJ 原理介绍。转载 2017-10-12 11:46:18 · 1311 阅读 · 0 评论 -
AspectJ教程--AOP面向切面编程框架(Android)
AOP的概念很久前就接触过了,不过没有真正写过项目,甚至Demo都没有,今天把这点缺陷补上。 推荐两篇文章(本文部分图片引自这两篇文章): 1. 【翻译】Android中的AOP编程 2. 【深入理解Android之AOP】1. 本篇文章总览2. 什么是AOP2.1 定义 AOP是Aspect Oriented Program的首字母缩写,译为:面向切面编程。类似的OOP,译原创 2017-10-13 14:02:43 · 9362 阅读 · 2 评论 -
设计模式六大原则之----依赖倒置原则
一、定义 高层模块不应该依赖于底层模块,二者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。抽象就是接口和抽象类;细节就是具体的实现类依赖倒置本质:通过抽象即接口或者抽象类,使各个类和模块间彼此独立,实现模块间的松耦合友情提醒:xmind导出的图片有点模糊,请方法查看 二、 问题的由来2.1 问题 类A直接依赖类B,假如要将类A改为依赖类C,那么必须修改类A来完成。这种场景下,原创 2017-11-15 17:42:52 · 560 阅读 · 0 评论