
设计模式
文章平均质量分 72
Must_Do_Kaihong
这个作者很懒,什么都没留下…
展开
-
解释器模式的简单使用
前言解释器模式使用频率比较少,顾名思义解释器模式就是给定一个语言,定义它的语法,然后解释器根据协议来解释这个语言,得到结果。类似于翻译吧。我觉得用的最多的就是计算表达式了:“A+B”,解释器就是按着操作符区分变量和运算符,然后得到A+B的结果。适用模式某个语言需要解析执行,比如解析XML之类的,可以用到解释器模式。再者如果特定场景不断重复这个场景,可以提取语法,抽象出解释其模式。角色扮演Abstra原创 2017-12-20 11:11:31 · 1144 阅读 · 0 评论 -
状态模式的简单使用
前言状态模式简而言之就是指我要做一件事,这件事能导致什么后果我不管,由当前状态来决定,比如我有两块钱,我想吃点东西就去了商店,结果怎么样得看这个商店有两块钱的什么东西,如果商品都大于两块,我还不能吃到食物了;这就和策略模式特别像了,他们的结构完全一样,状态模式的行为是由状态来决定,行为是平行的不可替换的,而策略模式的行为是可替换的,因为它都是为了完成同一个行为。原创 2017-12-18 20:51:45 · 1176 阅读 · 2 评论 -
责任链模式的简单使用
前言责任链模式自如其名,就是谁的责任谁来处理这个问题,但是对于这件问题只有一个请求入口,逐个传递达到结束请求的目的。其结构很像生活中的铁链,由一个个小的椭圆形的圆环相连,将每一个圆环看做一个对象,每一个对象都拥有不同的处理逻辑,首端发出请求,这些对象就会按需求来看谁满足处理这个请求的能力,沿着这个链结构逐个传递,最终解决问题。如果还不形象,我就举一个例子,你找领导报销10000元出差补助,你找了你的原创 2017-12-18 22:52:10 · 566 阅读 · 0 评论 -
中介者的简单使用
前言中介者模式又叫调解者模式,属于行为类模式,其意义在于封装一系列对象操作,使原本需要相互显式调用的各个对象不再需要直接显式调用,而是通过中间对象来做这个事情;这样就会将原本的网状结构变成了星型结构,各个对象只需要去对这个中间者交互,这样做就变得简单了。适用场景当对象之间的交互多而杂,相互依赖彼此,那么自然而然在后续修改中要跟着改所有的依赖,这样代码的扩展性就差了点,中介者模式完全适合,其解决了该场原创 2017-12-27 13:05:00 · 265 阅读 · 0 评论 -
桥接模式简单使用
前言桥接模式也称为桥梁模式,属于结构型设计模式。名如其名,桥梁模式就是连接没有关系的两个地,起到连接两边的作用,换点技术性语言,桥接模式就是将抽象部分和实现部分分离,使它们都可以独立进行变化,这个桥梁也就是连接抽象和实现部分了。适用任何多维变化类,亦或是多个树状类之间的耦合都可以用桥接模式来解耦。UML角色ABStraction:抽象部分,该类保持一个对实现部分的引用,原创 2018-01-22 18:11:57 · 801 阅读 · 0 评论 -
单例模式的几种实现
前言不管是学习什么语言,都会用到设计模式,那么Android也一样,只不过Android说回来其实就是Java,我想借用一些课余的时间,整理一下Android的设计模式。首当其冲的就是单例模式,这个在开发中使用最广泛了。单例模式的几种实现在Android源码中有很多使用了单例模式,比如WindowsManagerService、ActivityManagerService等系统级别原创 2017-12-13 18:17:28 · 346 阅读 · 0 评论 -
装饰模式简单使用
前言装饰模式又叫包装模式,字如其意,就是把一个事物包装起来,增加一些修饰物,动态的给一个对象添加一些额外的指责,这和继承有异曲同工的意思,对于增加一些功能来说,装饰模式比写子类来的爽快,这样说来平时随手都是装饰模式,随便来段代码: @Override public void onActivityCreated(@Nullable Bundle savedInstance原创 2018-01-03 18:04:32 · 445 阅读 · 0 评论 -
适配器模式(三种)简单使用
前言适配器模式是将一个类的接口转换成客户希望的另外一个接口,身边很多东西都是适用于适配器模式的,笔记本的电源(也叫电源适配器),是将220V的交流电转换为笔记本电脑所需要的12V(电流先忽略),笔记本电脑的各种接口,VGA转Hdml,USB-TypeA 转 USB-TypeC,亦或者你在香港买了个手机,充电器是你生活中没见过的三孔插座通过一个转换头转换为国内常用的插头,很多例子都能很形象的解释原创 2018-01-25 18:03:00 · 34159 阅读 · 12 评论 -
组合模式的简单使用
前言组合模式也称为整体部分模式,其结构比较简单,类似于组织结构的树状图,就像我所在的公司,属于集团下面的子公司,集团包括行政部门和财务,而我们公司也有这样两个部门,更加形象的说,组合模式最容易理解的是电脑的磁盘文件夹,文件夹里面可以有各类文件,也还可以有子文件夹,而子文件夹里面也同样可以有这些东西。关于定义则套用百度百科:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使原创 2018-01-09 23:29:25 · 418 阅读 · 0 评论 -
享元模式的简单使用
前言享元模式是一种软件设计模式,是对象池的一种实现,其目的在于尽可能的减少内存的使用量,内存属于稀缺资源,如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存,不必每个都去实例化对象,从而节省内存,其实现共享的关键在于区分内部和外部状态,内部可共享,外部不可共享,从而实现高效重用。角色扮演FlyWeight: 抽象享元类,可以使一个接口也可以是抽原创 2018-01-18 18:30:29 · 1345 阅读 · 1 评论 -
访问者模式简单使用
“访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方法。”我觉得这个解释非常好,我们使用观察者模式的用意就是完成这个目的,以至于添加一个统一的接口accept,来接受一个访问者对象,怎么做到区别对待呢,那就是通过Visitor的不同来处理不同的操作,再怎么解释也不如甩个demo。适用模式要用这个模式,其对象必须要结构稳定,当然子类可以增加属性;另一方面如果使用对象不原创 2017-12-26 22:38:16 · 1081 阅读 · 0 评论 -
模板模式的简单使用
前言定义一个操作的算法步骤,固化一个算法流程,子类按着自己的需求复写父类的部分方法,使得子类可以不改变固化的算法步骤,即可重新定义该过程的特定步骤。这个最熟悉的应该是Activity的生命周期,当然各种组件的生命周期都是模板模式的,这个就很容易理解了。适用对象1,多个过程逻辑基本相同。 2,重复的算法,可以提取核心作为模板,子类各抒己见。 3,很多时候我们要简化Activity或者其他类的逻辑,原创 2017-12-26 22:34:54 · 259 阅读 · 0 评论 -
Builder模式的简单实现
前言Builder模式是将对象的构建和表示分离,好比构建一辆汽车,Builder是将部件和组装过程分离,从而达到高内聚低耦合的目的。使用场景1.相同的方法,结果和执行顺序有关。 2.多个部件都可以组装到一个对象中,但是结果和这个部件有关。 3.产品非常复杂,或者初始化对象非常复杂(参数太多)。简单的代码实现Build分为Products产品类(产品的抽象类)、Builder类(规范产品的组建,但原创 2017-12-14 09:42:47 · 424 阅读 · 0 评论 -
原型模型的简单使用
前言原型模型的使用在Android里最大的体现是Intent,通过看源码不难发现,intent传值进去之后在startActivity之前会clone一份Intent,说回来原型模式其实就牵扯到拷贝问题,换一句话,预防对象被意外改动使用拷贝就是原型模式。使用场景1.类初始化操作复杂,牵扯到太多资源的。 2.一个对象需要提供给其他对象访问,那各个调用它的对象都可能更改它的值,但是更改的值只对该对象使原创 2017-12-14 20:02:45 · 1593 阅读 · 0 评论 -
工厂方法模式的简单使用
前言工厂模式是java中使用特别广泛的一种设计模式,如过对象很复杂或者多个对象拥有一些共同的特性,比如数据存储,可以使txt,也可以是sql数据库,或者说是xml文件,当然Android还提供了preferences,都是存储文件那么方法的作用就会大同小异,这种情况下就很容易想到工厂模式。原创 2017-12-14 20:39:13 · 282 阅读 · 0 评论 -
观察者模式的简单使用
前言我们在Android ListView或者Recyclerview的开发中,常常是数据更新之后要立刻去更新界面,这种Adapter的notifyDateSetChanged就运用了观察者模式;观察者模式是一种使用率非常高的模式,常常用到GUI之类的的系统中,界面跟随数据发生改变,使得UI和具体的页面逻辑分开解耦,换而言之,观察者模式就是一对多的关系,一个对象发生改变,其依赖于它的所有对象都收到通原创 2017-12-25 21:52:06 · 410 阅读 · 0 评论 -
备忘录模式的简单使用
前言备忘录模式是一种行为模式,用于存储对象的当前状态,这个在Android开发中最常见的事Activity的恢复onSaveInstanceState方法,存储当前activity的状态,对于备忘录模式的定义,百度百科解释如下:备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。适用模式1,我们要保存对象的原创 2017-12-26 00:00:41 · 319 阅读 · 0 评论 -
抽象工厂模式简单使用
前言工厂方法模式指定了抽象了产品的功能,等待具体产品去实现该功能,而工厂方法不管产品的任何实现,只需要按需返回指定产品类;但是当工厂类生产的产品差别很大的时候,要对每一个产品区别化时,我们需要去更改具体的Product类的方法,比如汽车的例子,我们两个车的引擎不一样,那么我们就要去改Product类里面的Engine的具体实现,这种情况下,抽象工厂模式就更适合。抽象工厂模式可以对产品的零部件做一个基原创 2017-12-17 15:08:18 · 388 阅读 · 0 评论 -
策略模式的简单使用
前言最近上班基本都没写java(Android)代码了,这段时间被系统研发部借去开发PHP网站,下班回家抽点时间可以整理一下关于java的设计模式,当然这也适用于Android。今天要整理的事策略模式。在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能;很常见的就是排序算法,我们完成一个排序可以通过很多算法,但是到头来原创 2017-12-17 16:34:09 · 317 阅读 · 0 评论 -
迭代器模式的简单模式
前言迭代器模式又叫游标模式,是一种行为型模式,我们常常用到的Sqlite的数据库查询就用到了这种模式,更多时候我们用的多的或许是java的Iterator类,来遍历数据;而迭代器模式提供顺序遍历对象各个元素,又不暴露对象的内部表示。适用模式1,访问一个对象的内容而无需暴露它的内部表示; 2,遍历容器对象; 3,为遍历不同的结构提供一个统一的接口。角色扮演Iterator:迭代器接口,负责定义、访原创 2017-12-26 22:31:56 · 265 阅读 · 0 评论 -
外观模式的简单使用
前言外观模式的目的是隐藏复杂的内部逻辑,让客户端只需要调对外的统一接口,隐藏了系统的复杂性,这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。使用场景1、当你要为一个复杂子系统提供一个简单接口时。 2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以原创 2018-01-19 17:38:54 · 313 阅读 · 0 评论