设计模式-Java-Android
设计模式是方法,是一套被反复使用,应用于不同场景的方法。往往重构时都会使用到它,做新功能的时候,考虑扩展性时也会去考虑使用它。提升自我必备,了解它,没道理!
Joney小鬼
做自己爱做的事
展开
-
简述-访问者模式
介绍访问模式是23种模式中最复杂的一个。目的在于将数据操作与数据结构进行分离。一个系统由许多对象组成,每个对象都有一个accept操作来接收访问者访问,对象会调用访问者的visit方法传入该对象,使得访问者可以访问处理对象结构中的每个元素。访问者是一个接口,又根据实现不同的访问者来达到对系统类的不同访问实现。Android中APT(Annotation Processing Tools)则是使...原创 2018-11-15 22:52:17 · 349 阅读 · 0 评论 -
简述-组合模式
介绍本模式为结构型设计模式之一,也称为部分与整体模式。在上面说到解释器模式,里面有叶子和枝干到概念。本模式也有叶子和枝干到概念。将一组相似到对象看作一个对象处理,并根据一个树状架构来组合对象,提供一个统一的方法去访问相应的对象。总公司有子公司和其部门组成,子公司又有自己的部门,这里母公司就是根,母公司部门就是叶子,子公司就是枝干,子公司部门又是叶子。比如:像我们文件和目录使用的则是组合模式。A...原创 2018-11-15 22:50:18 · 221 阅读 · 0 评论 -
简述-解释器模式
介绍一种用得比较少的行为型模式。其提供一种解释语言的语法或表达式的方式,化繁为简。比如给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器用来解释语言中的句子。Android中的AndroidManifest.xml的解析,PackageParser就用到了这种模式。场景简单语言需要解释执行且可以将该语言的语句表示为抽象语法树(如±法运算)特定领域出现不断重复,可以将该问题...原创 2018-11-15 17:51:32 · 201 阅读 · 0 评论 -
简述-命令模式
介绍行为型设计模式之一。这个模式没有规矩,比较灵活。将一些列的方法调用封装,用户只需要调用一个方法执行,那么所有这些被封装的方法就会被挨个执行调用。如名字一样,命令,比如开机命令,只需要一条命令,内部操作都封装好了自己执行。很多时候封装API其实也可以看作是一个简单的命令Android中使用多,但不是很典型,比较典型的是Android的事件机制中底层逻辑对事件的转发处理,Android的每一种...原创 2018-11-15 17:48:09 · 212 阅读 · 0 评论 -
简述-迭代器模式
介绍一个容器,必然会涉及到遍历算法,如果将它封装在容器中,则增加了复杂度,如果客户实现,则不那么方便。所以引入第三方类来帮忙处理,这个类就是迭代器。又称为游标模式,行为型设计模式之一。我的理解是目的在遍历,弱化容器与遍历算法的关系。在容器与访问类中添加一个迭代器,用于承担遍历,又不需要访问类自行实现。提供一种顺序访问一个容器对象中的各个元素,而又不需要暴露改对象的内部表示。Android中数...原创 2018-11-15 17:46:28 · 366 阅读 · 0 评论 -
简述-适配器模式
适配器模式介绍顾名思义,就是要做到适配的作用,类似于电源适配器,转换进电达到出电固定。将两个不兼容电融合到一起,粘合剂到作用。把一个类到接口变换成客户端所期待到另一种接口,从而使得原本接口不匹配无法在一起工作到两个类能够在一起工作。Android中到ListView、GridView、RecycleView都需要使用到的Adpater则使用到了适配器模式。ListView使用的Adapter...原创 2018-11-15 17:44:33 · 540 阅读 · 0 评论 -
简述-桥接模式
桥接模式介绍结构型模式之一,顾名思义,目的为连接两边。这里的两边可以指的是两个独立变化的方向,如电器和开关,开关很多种,电器很多种,两者独立变化又是耦合。通过桥接模式,可将多维度变化类或者多个树状类之间的耦合解耦。Android中view视图层级,控件与绘制到屏幕相关实现类DisplayList、HardWareLayer和Canvas可以看作桥接模式。Adapter和AdapteView也...原创 2018-11-15 17:42:16 · 606 阅读 · 0 评论 -
简述-装饰者模式
装饰模式介绍结构型模式之一,通过装饰者持有组件(被装饰者)的引用,也含有调用组件的方法。而这两个往往两个都是抽象,都有具体的实现。那么在具体的装饰者中,调用具体的组件方法,使用super方式来调用,再其调用前后可以自由添加想用的新增方法,这新增方法就是装饰了。Android中咱们常用的startActivity()等方法,是在Context中,而具体实现是ContextImpl,然而持有Co...原创 2018-11-15 17:40:14 · 497 阅读 · 0 评论 -
简述-中介者模式
介绍顾名思义,中介,在多方之间调和。对应到代码中就是将多个互相依赖的对象通过增加一个中介者来调和。子系统相互依赖的时候,通过中介者来调用依赖方,这样子系统就不必知道另外的子系统,所有子系统都只知道中介者,而中介者知道所有子系统。UML组成结构Mediator:抽象中介者角色,定义同事对象到中介者对象的接口,一般以抽象类实现。ConcreteMediator:具体中介者角色,实现父类...原创 2018-11-15 17:33:03 · 209 阅读 · 0 评论 -
简述-外观模式
介绍外观模式,提供一个统一的接口供使用者访问,隐蔽内部实现,制作API必备。应该每一个开发者都会使用到,因为你在使用SDK的时候受到的熏陶,无意之间自己写也经常会封装。只是可能你并没有把它认识为到模式层面。Android中,Context就用到来外观模式,像什么startActivity()、sendBroadcast()等等,就是该类提供出来的外观方法。UMLFaced : 外观接口...原创 2018-11-15 17:30:08 · 442 阅读 · 1 评论 -
简述-模版模式
介绍重构必备,抽取基类,应对变化。书中说到,确定步骤执行顺序,但是某些步骤的具体实现是未知的,或者说实现是会随着环境变化而改变的。这里很明确了,例如,简单吃饭步骤。端起饭碗->夹菜->吃。在夹菜这个步骤就可能变化了,有的是夹肉,有的夹素菜。但端碗和吃是固定的,就可以抽取到基类中,而夹菜这个步骤可以抽象让子类去实现。该模式的定义为,定义操作框架,将某些步骤延迟到子类中,使得子类可以不...原创 2018-10-13 23:26:29 · 188 阅读 · 0 评论 -
简述-备忘录模式
介绍备忘录顾名思义就是存储,方便下次使用,达到后悔药的作用。定义在不破坏封闭的情况下,捕获对象内部状态,在该对象之外保存这个状态,在需要的时候可以进行恢复。UMLOriginator (源头对象): 负责创建一个备忘录,可以记录、恢复自身的内部状态。同时Originator还可以根据需要决定Memnento存储自身的哪些内部状态。Memento(存储状态信息的对象): 备忘录角色,...原创 2018-10-13 23:25:04 · 229 阅读 · 0 评论 -
简述-享元模式
介绍享元的主旨在共享,既然共享了,那么就好处就是可以复用了,它的英文名叫Flyweight,轻量级的意思,通过共享的方式来节省内存开销。其目的是达到部分状态可共享,可共享的状态为内部状态(不随外部环境改变),不可共享为外部状态(可随外部环境改变)。原理即是做缓存对象处理。比如Android中的Message,推荐使用handler的obtain方法来获取一个message,这种方式获取的me...原创 2018-10-13 23:23:52 · 291 阅读 · 0 评论 -
简述-代理模式
介绍代理代理,就是找个中间人来做代理处理某件事。不过读了书后感觉挺坑的,说好的代理,只是暴露相对客户端来说,实际执行的,还是直接人,泪奔。不过它的目的不是帮你执行,而是代理控制对象的访问。这个模式是个编程好帮手,使用时候多多的,Android源码中,我们一直都有接触到到AMS的使用就用到了代理模式UML使用场景如果无法或者不想直接访问某个对象事例爸爸要通知孩子做家务,和玩耍,但是...原创 2018-10-13 23:21:53 · 406 阅读 · 0 评论 -
简述-责任链模式
责任链模式介绍责任链模式是行为型设计模式之一。链则代表链式调用,采用链式调用方式,让调用者和处理者解偶。比如android中的有序广播,谁处理了后调用abortBroadcast()就可以终止了。不用说Android中的有序广播就用到了此模式了UML使用场景多个对象都可以处理同一个请求,但是由哪个对象处理在运行时决定请求处理这不明确的情况下向多个对象中的一个提交请求需要动态指定一...原创 2018-09-23 20:54:28 · 181 阅读 · 0 评论 -
简述-观察者模式
你不知道哪天妈妈会让你做作业,然后你就一直等待,直到有一天老师让你做作业了,通知了你,你就拿笔开始了你鬼画桃符。这就是一个观察者模式的体现。(最讨厌写作业)接下来我们用代码来解决这个问题。UML使用场景关联行为场景,关联行为可拆分,非聚合关系事件多级触发场景跨系统消息交换,如消息队列、事件总线的处理机制先创建Mather,继承子Observable(java中携带...原创 2018-09-23 20:52:10 · 642 阅读 · 0 评论 -
简述-构建者模式
介绍Builder模式可用于创建一个复杂对象。用户往往不知道内部情况,可以通过构建方法来精细控制构建过程。顾名思义,Build作为创建一个类的中介类,使用Builder的方法来设置要创建类中的各个需要的参数并进行构建对应的对象。Android中的AlterDialog就用到了此模式,另外像ImageLoader等也都用到了此模式。UML这是通常实际的构建者使用方式,不是经典使用UML。使...原创 2018-09-23 20:48:30 · 1871 阅读 · 0 评论 -
简述-状态模式
介绍状态模式的行为是平行不可替换的。策略模式行为是彼此独立可替换的。状态模式意图在一个对象内部状态改变的时候,行为也跟着改变。UML事例洗衣机按键板,在打开电源情况下,可以按程序按钮,选择选择模式。按水量按钮,选择水量等。在关闭电源情况下,程序按钮,水量按钮的点击就没有了效果。一个简易Java例子大致如下:定义一个接口,提供两个按钮执行的方法:pub...原创 2018-09-11 22:23:20 · 254 阅读 · 0 评论 -
简述-策略模式
事例一个每天打饭的时候,都会打一个荤菜和一个素菜和一人饭。饭固定,一个人一块,素菜也是固定的,只要1.6元而荤菜则根据不同菜品和不同重量来计算。鸭肉需要1.5块一两,鸡肉需要2块一两,猪肉1.8块一两。换算到java中,我们要计算中午饭多少钱,可以用如下方式。public class PriceClient{ private static int pork=1; private sta原创 2017-09-17 19:46:17 · 494 阅读 · 0 评论 -
简述-工厂模式
工厂事例:某公司下有多条生产线,都是生产鸭脖。但鸭脖有酱香的,有麻辣的,有五香的,有原味的。每条生产线生产一种鸭脖,而鸭脖又对应不同味道即不同商标。对于忙碌的领导来说,他需要知道所有生产线吗和所有鸭脖吗?那样的话要记录的事也太多了,越来越多的生产线和鸭脖味道就会越来越复杂。对应在程序中也是如此,领导只需要关心有生产线生产鸭脖,鸭脖有味道就可以了。用得最多的模式,工厂模式来表述上面事例。抽象工厂和抽象原创 2017-08-13 14:17:58 · 341 阅读 · 0 评论 -
简述-原型模式
原型模式原型模式,用起来其实就是做clone操作,clone一个对象,越过构造器,在特定使用场景下增加效率。使用场景:类初始化需要消耗很多资源,比较耗时。new方式非常繁琐,还涉及到权限之类的。用clone就减少操作。一个对象需要提供给其他对象使用,而且各个使用都可能改到值,可以考虑用原型模式,做保护性拷贝。先说说原型模式主要的浅拷贝和深拷贝:浅拷贝:可被clone的对象:实现 Clone原创 2017-06-14 22:27:52 · 334 阅读 · 0 评论 -
简述-单例模式
单例方式看到很多人写单例都不考虑线程安全,当多线程操作当时候,就可能出现多个实例,那么不就违背了单例的初衷了么?如果要维护到单例类中到成员,那就更尴尬了,我看到也实在是无奈,所以这里建议大家写单例是需要做到线程安全到!!首先说推荐单例模式写法,其目的主要是为了做到线程安全:DCL (Double CheckLock) public class Singleton { private Sin原创 2017-05-27 10:38:45 · 395 阅读 · 0 评论 -
简记Android源码设计模式——Two
本文章为读《Android源码设计模式》后简记,简记摘抄,推荐读者可阅读这本书,的确很不错。享元模式介绍享元模式也是用的比较多的一个模式。其目的是达到部分状态可共享,可共享的状态为内部状态(不随外部环境改变),不可共享为外部状态(可随外部环境改变)。原理即是做缓存对象处理。比如Android中的Message,推荐使用handler的obtain方法来获取一个message,这种方式获取的messa原创 2017-12-13 22:15:04 · 424 阅读 · 0 评论 -
简记Android源码设计模式——One
单例模式介绍单例模式可谓是都会用到的一个设计模式。单例顾名思义只有一个实例。就像规定任何时候你只能有一个老婆或直接没有老婆一样。(都是泪)UML使用场景是在全局下,需要只有该类一个实例,避免产生多个对象消耗过多的资源,如访问IO或者数据库等资源的对象。这样访问该类中变量也是唯一的。正常情况下我们需要写线程安全的方式,避免多线程情况下还是创建了多个实例。工厂模式介绍创建型设计模式之一,工厂模式,如名一原创 2017-11-27 21:40:23 · 342 阅读 · 0 评论