设计模式
文章平均质量分 96
RikkaTheWorld
一个OTAKU
展开
-
《重构》学习(5)常用的重构手法 下
系列文章目录1. 《重构》学习(1)拆分 statement 函数2. 《重构》学习(2)拆分逻辑与多态使用3. 《重构》学习(3)概述4. 《重构》学习(4)常用的重构手法 上文章目录系列文章目录3.7 变量改名3.8 引入参数对象(Introduce Parameter Object)3.8.1 为什么3.7 变量改名Rename Variable:这一节就无须多解释了,变量名称不要取有歧义的,也不要为了图便宜,而经常简写。例如把 name 简写成 nm, 把 company原创 2021-12-10 21:09:53 · 637 阅读 · 0 评论 -
《重构》学习(4)常用的重构手法 上
文章目录3. 第一组重构3.1 提炼函数3.1.1 抽出无关局部变量的代码3.1.2 有局部变量的提炼3.1.3 对局部变量再赋值3.2 内联函数(Inline Function)3.2.1 使用内联函数的场景3.2.2 使用内联函数的步骤3.2.3 范例3.3 提炼变量3.3.1 使用场景3.3.2 步骤3.3.4 示例3.4 内联变量我这边学习直接跳过了《重构》第3、4、5章,原因是:第三章,代码坏味道比较公式化的原则,仅是记录,在开发中规避,养成习惯就好了第四章, 构筑测试体系我所在的公司原创 2021-12-10 09:04:17 · 1053 阅读 · 0 评论 -
《重构》学习(3)概述
文章目录2. 重构的原则2.1 什么是重构2.2 两个帽子概念2.3 重构的意义2.3.1 改进软件的设计2.3.2 使软件更容易理解2.3.3 帮助找到Bug2.3.4 提高编程速度2.4 什么时候重构2.4.1 预备性的重构:让添加新功能更加容易2.4.2 帮助理解的重构:让代码易懂2.4.3 捡垃圾式重构2.4.4 有计划的重构和见机行事的重构2.4.5 长期重构2.4.6 复审代码时重构2.4.7 何时不重构2. 重构的原则2.1 什么是重构重构既可以是名词,也可以是动词作为名词它表示对原创 2021-12-03 10:13:09 · 377 阅读 · 0 评论 -
《重构》学习(2)拆分逻辑与多态使用
系列文章目录1. 《重构》学习(1)拆分 statement 函数目录系列文章目录1.5 拆分计算阶段与格式化阶段1.5 拆分计算阶段与格式化阶段在上一篇中,我们将 statement() 函数进行了重构,这样我们就可以新增功能了。比如, statement() 是返回一个 String 字符串的, 客户希望我们返回的是一个 Json 文件或者 HTML格式的详情账单。因为我们的计算代码已经被分离出来了,所以我可以只需要为顶层的7行函数新增一个 HTML 的版本。 但问题是,就算之前的函数组原创 2021-12-01 20:53:45 · 558 阅读 · 0 评论 -
《重构》学习(1)拆分 statement 函数
自己在项目中开始承担越来越重的任务,但是代码的水平没有怎么提高,CodeReview时经常被leader质疑这质疑那,只能说还需要提高程序设计水平。之前阅读过 《大话设计模式》,粗略的学习了设计原则,收获比较多的是了解了些最常用的设计模式,例如 单例、工厂模式、建造模式等,还了解了诸如单一职责原则等的设计原则,最重要的是学会了画UML图。但仅仅这样是还不够的,这种东西只有学的越多,才能刻入自己写的代码中,所以我想通过学习 《重构第二版》一书,来提高coding能力,以便以后在设计代码时考虑的更全面一些。原创 2021-11-28 10:39:16 · 799 阅读 · 0 评论 -
浅学设计模式之解释器模式(23/23)
1. 解释器模式的概念解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决各种问题。举个例子,正则表达式就是解释器模式的一种运用,在没有出现正则表达式之前,我们在 Email、电话这些场景中需要去判断字符串是否合法,我们会分别对他们编写特定原创 2020-06-17 11:14:27 · 218 阅读 · 0 评论 -
浅学设计模式之命令模式(22/23)
1. 命令模式的概念命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式是行为型设计模式之一。我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击“关机”命令,系统就会去执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然后结束程序进程,最后调用内核命令关闭计算机等,对于这一系列的命令,用户不用去管,用户只需只需点击系统的关机按钮即可完成如上一系列的命令。而我们的命令模式其原创 2020-06-16 15:56:05 · 179 阅读 · 0 评论 -
浅学设计模式之桥接模式(21/23)
在学习桥接模式之前,需要学习设计模式中的另外一个原则 — 合成/聚合复用原则1. 合成/聚合复用原则合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承。合成和聚合都是关联的特殊种类。聚合是一种弱的“拥有”关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分合成是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的周期是一样的举个例子,大雁有两个翅膀,大雁和翅膀的生命周期是一样的,他们是整体与部分的关系,所以大雁和翅膀是合成关系。因为大雁是原创 2020-06-16 11:37:26 · 192 阅读 · 0 评论 -
浅学设计模式之代理模式(20/23)
代理模式是我们在看源码中经常会看到的设计模式,像 Retrofit、ActivityManagerService等都使用到了代理模式。那什么时候需要使用到代理模式呢?1. 代理模式的概念代理模式(Proxy), 为其他对象提供一种代理以控制对这个对象的访问。结构型的设计模式,在所有的结构型的设计模式中,都会有不少代理模式的影子,代理模式是为了形成中介隔离,这里有点像体现迪米特法则的 中介者模式,但是他们还是有一些区别的,这一点学完就知道了。2 UML图来看下UML类图:代理模式的结构是非原创 2020-06-15 18:35:22 · 199 阅读 · 0 评论 -
浅学设计模式之享元模式(19/23)
假如现在有很多的客户来找你做网站,有的客户要实现博客功能,有的空户要实现像电商那样的图片视频展示功能,有的实现像新闻那样展示图片+文字的效果,你应该怎么做?如果我们实现一套代码,然后为每个客户端都使用复制+粘贴实现功能,然后每个客户都实现数据库。这样的做法的问题是什么?如果说基础代码出现问题,那么每个客户的代码都要维护,其实每个客户都要申请独立空间和维护数据,这将会导致工程繁杂又庞大,会做很多无效功。如果我们将这些客户,都抽象起来,比如现在大型的blog网站、电商网站,下面都有许多个小网站,我们学习以原创 2020-06-12 15:46:10 · 264 阅读 · 0 评论 -
浅学设计模式之中介者模式(18/23)
1. 中介者模式的概念中介者模式(Mediator), 用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。上面这句话其实就是将两个会发生作用的对象通过一个中介来解耦和,这就是迪米特法则的体现。在开发中,我们使用了像MVP、MVVM这样的代码结构,目的是为了减少界面层的代码逻辑,将界面和数据层分开,P层和VM层就像中介者一样,避免了两者间的直接交互。2. UML图在上图中,我们把 ConcreteColleague1原创 2020-06-11 16:29:17 · 191 阅读 · 0 评论 -
浅学设计模式之组合模式(17/23)
1. 组合模式的概念组合模式(Composite), 将对象组合成属性结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式也被成为 部分-整体模式,属于结构型的设计模式。组合模式比较简单,它将一组相似的对象看做一个对象来处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。生活中一个比较典型的例子就是公司的组织结构树状图,如下所示:上面是一个公司的组织结构树状图,其中总公司下有人力资源部与原创 2020-06-10 19:26:28 · 207 阅读 · 0 评论 -
浅学设计模式之迭代器模式(16/23)
1. 迭代器模式的概念迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的表示。又称为“游标模式”,是一种行为模式,当你想要访问一个聚集对象,而不管这些对象是什么都需要遍历的时候,就应该考虑迭代器模式。它为遍历不同的聚集结构提供了如开始、下一个、是否结束、当前哪一项等统一的接口。遍历是我们日常开发中最常用到的一种方式,但有时候让我们的遍历一些奇奇怪怪的集合时,我们会无从下手。比如我在刚学习HashMap时,就对其遍历方式感到苦手,因为它的 map.g原创 2020-06-05 11:14:20 · 188 阅读 · 0 评论 -
浅学设计模式之备忘录模式(15/23)
1. 备忘录模式的概念备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。备忘录模式就像游戏中的存档,在某个时候我们想要回退到之前状态是,使用存档就可以了。备忘录提供了这么一套代码的思想。它是一种行为模式。用于保存当前的状态,并且在之后可以再次恢复到此状态。这种看似在程序中很少出现的用法,我们是否有机会使用到呢?2. UML图和模板代码我们来看下备忘录模式的UML图:上面一共有三个对象,他们原创 2020-06-02 20:42:27 · 294 阅读 · 0 评论 -
浅学设计模式之职责链模式(14/23)
1. 职责链模式的概念职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这个条链传递该请求,直到有一个对象处理它为止。在Java/Android开发中,这个模式我们并不陌生,比如Java的类加载机制,“双亲委托”模型,Android中触摸事件的传递机制,都体现了职责链模式。以上面的模型来理解责任链模式,对于一个事件来说,它并不需要知道谁来处理它,这样就解除了事件和处理事件的对象的耦合。原创 2020-05-29 14:28:01 · 162 阅读 · 0 评论 -
浅学设计模式之单例模式(13/23)附带volatile修饰的详解
由于单例模式用的多,对我们来说可能会很简单,所以这篇会省去很多篇幅。1. 单例模式的概念单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 这就是单例模式。2. UML图对于单例来说,instance和构造方法都是private,提供一个public的getI原创 2020-05-23 17:28:00 · 255 阅读 · 0 评论 -
浅学设计模式之适配器模式(12/23)
作为一个Android程序员,RecyclerView、ListView是平时开发中经常会使用到的,可以说是非常亲切熟悉,而他们体现的设计模式正是适配器模式。1 适配器模式概念适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类一起工作。当系统的数据和行为都正确,但是接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求原创 2020-05-22 13:52:41 · 214 阅读 · 0 评论 -
浅学设计模式之抽象工厂方法模式(11/23)
1. 抽象工厂模式概念抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式也是创建型设计模式之一。在前一章我们已经了解过了工厂方法模式,那抽象工厂模式又是怎么一回事呢?大家联想一下,现实生活中的工厂肯定都是具体的,也就是说每个工厂都会生产某一种具体的产品,那么抽象工厂就意味着生产出来的产品是不确定的,那这岂不是...原创 2020-05-09 09:37:36 · 249 阅读 · 0 评论 -
浅学设计模式之工厂方法模式(10/23)
工厂方法模式可以分为:简单(静态)工厂方法模式、工厂方法模式、抽象工厂方法模式。他们都属于创建型模式。其中简单工厂方法模式不属于标准的23个设计模式,但是学习工厂方法模式的好引子。而其工厂模式几乎是Android中用到的最广方的设计模式了,fwk层就充斥着这样的模式。本篇就来学习前两种方法模式。1. 简单工厂模式简单工厂模式又叫静态工厂模式。1.1 代码例子假如我们现在使用面向对象的...原创 2020-05-08 11:21:11 · 177 阅读 · 0 评论 -
浅学设计模式之访问者模式(9/23)
1.访问者模式的概念访问者模式(Visitor)表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。一些情况下,我们会把 算法 和 数据结构抽出来。在数据结构较为稳定,算法易于变化的情况下,使用访问者模式,可以使算法模块的增删改更加容易。2.代码例子一个来自于《大话》中的例子。2.1 if…else的堆叠给个题目:人类在性别上分...原创 2020-04-28 17:06:09 · 198 阅读 · 0 评论 -
Android的MVC模型
现在网上的关于MVC的理解博客有很多,这里只是自己描述一下。 MVC模型为 M:model,模型,描述数据和数据操作的模型 V:view,视图,显示出想要显示的数据 C:controller,控制器,连接model和view,让用户进行流畅想要的操作。优点: 耦合性低,一共就3个明确分工的模型,各个模块的独立性比较强 可维护性较高(因为还是耦合性低) 生命周期成本低缺点: ...原创 2018-06-25 19:09:35 · 226 阅读 · 0 评论 -
浅学设计模式之 几个设计原则(1.5/23)
单一职责原则从字面意思来看,一个对象所做职责要单一。就一个类而言,应该仅有一个引起它变化的原因比如说我们写了一个类,在里面做SQL操作,又做了一些运算算法,这样的代码在需求来临时,我们都要更改这个类,有时候会对类的别的功能产生了影响,这其实很糟糕的,维护麻烦,复用不可能,灵活性极差。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化肯能会削弱或者抑制这个类完成其他职...原创 2019-04-27 14:47:18 · 208 阅读 · 0 评论 -
浅学设计模式之装饰模式 (2/23)
1、装饰模式的概念装饰模式就是动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。对于人来说,衣服、鞋子、领带、袜子等都是装饰,装饰模式就是给光着身子的人穿上各种衣服裤子。对于程序对象来说,每一个功能都是装饰,给一个类增加功能,就是给这个类进行装饰。2、装饰模式的UML图及对应代码Compoent是一个对象接口,可以给这些对象动态地添加职责:class...原创 2019-04-28 09:26:09 · 322 阅读 · 0 评论 -
浅学设计模式之原型模式 (3/23)
今天浅学一下设计模式中比较常用而且重要的工厂模式。这边参考的blog为:分类工厂模式按照实际的需求大致分为三大类:简单工厂模式工厂方法模式抽象工厂模式我们分别对它们进行解读,并分析其优缺点,首先要搞懂整个工厂模式是做什么的1、工厂模式的概念工厂模式分了那么多种,但是本质就是一句话:它是一个实例化对象的模式,工厂方法替代new至于为什么这么讲,我们就看看它们具体的实现吧...原创 2019-07-09 17:06:04 · 168 阅读 · 0 评论 -
浅学设计模式之模板方法模式 (4/23)
1、模板方法模式的概念定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤如果能够看懂上面这句话,那么你一定会觉得:模板方法模式的理解真是太TM简单了!它不就是我们Android应用、Java应用的基类吗!?我TM的?使用场景都不用说了…2、UML图使用场景还是大致说一下,比如我们在Android应用中,因...原创 2019-07-09 19:31:31 · 177 阅读 · 0 评论 -
浅学设计模式之外观模式 (5/23)
1、外观模式的概念外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。定义就是这么晦涩的。可以把这句话拆成几个属性来理解:子系统就是我们自己是用的类子系统的一组接口这个类会使用的 多个接口,每个接口都有它的方法要去实现一个高层接口,为这些接口提供一致界面通过连接这个高层接口,就相当于连接了之前的那些...原创 2019-07-10 16:26:39 · 176 阅读 · 0 评论 -
浅学设计模式之建造者模式 (6/23)
1、建造者模式建造者模式(Builder),将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示建造者在Android中,至少也是23种设计模式使用频率能排进前三的模式了吧。因为这个模式太常用了所以我就画个UML图和写写模板代码就好了…2、UML图建造模式中,主要是Builder为一个创建入口,它可以通过方法初始化数据。在实际开发中,其实分出Buidler和Co...原创 2019-07-10 17:07:12 · 145 阅读 · 0 评论 -
浅学设计模式之观察者模式 (7/23)
1、观察者模式的概念观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式的编程核心就是监听一个对象的行为,在行为改变时通知所有的订阅者对象观察者模式也是面向对象编程中的一种很重要的模式。它所衍生出来的编程风格又称为 发布-订阅(Publish/subscribe)模式,响应...原创 2019-07-11 11:34:49 · 154 阅读 · 0 评论 -
浅学设计模式之状态模式 (8/23)
1、状态模式的概念状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类状态模式是对一个对象所处的状态作分析。在不同的状态下表现不同的行为。状态模式就是对不同状态的行为进行解耦。2、使用场景这里还是举大话设计模式的例子。就拿一个人一天工作的行为来说吧,这个人一天有五种状态,上午、中午、下午、傍晚、晚上各一种。 然后又有个参数是 是否完成工作,...原创 2019-07-11 15:51:00 · 300 阅读 · 0 评论 -
浅学设计模式之策略模式 (1/23)
几天开始浅学设计模式,希望在毕业前能够稍微总结一下23种设计模式+一些设计原则。总结的流程大概是:学习概念知道使用场景写出模板代码画出其UML图分析特点、优势今天学的是策略模式参考的blog有:深入解析策略模式1、策略模式的概念策略模式是一种定义一系列算法的方法,从概念上来看所有算法完成的都是相同的工作,只是实现有所不同(同目的不同路),它可以以相同的方式调用所有的算法,...原创 2019-04-26 11:53:21 · 235 阅读 · 0 评论