Android源码设计模式应用
文章平均质量分 68
疯狂Max
https://github.com/cxMax
展开
-
简单三步通过Builder模式来实现Android顶部导航TopBar
作为一个Android开发人员在开发的时候,经常会对APP不同页面的Topbar\ActionBar进行设置, 这是Topbar左中右三个控件的属性,通过set方法,来调用设置: // 整个topbar的背景色,默认是橘黄色 private int backgaroundColor = 0xFFF59563; // 声明Topbar所需要的控件 private Tex原创 2016-01-10 18:24:59 · 922 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (17) 第17章 中介者模式
前言中介者模式面向的是多类对象定义定义:包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用.将多对多相互作用转化为一对多的相互作用.优点:可以对依赖关系的类进行解耦使逻辑结构清晰使用场景:对象之间交互操作,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,来解决耦合问题.UML类图Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类方式原创 2016-02-21 23:31:28 · 632 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (12) 第12章 观察者模式
前言最近在做IM即时通讯语音录制发送这个模块的时候,用到了观察者模式,因此结合书上内容在加深了一遍,不得不说观察者模式是一个使用率非常高的模式.定义定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新作用:将观察者和被观察者解耦.最常用在GUI系统,订阅-发布系统.笔者遇到的场景是聊天语音播放和控制.应用场景:关联行为场景,多级触发场景,原创 2016-02-17 23:50:33 · 540 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (6) 第6章 抽象工厂模式
前言相比于工厂模式,工厂模式是生产不同的复杂的具体的产品对象,而抽象工厂模式呢,抽象工厂生产出抽象产品,抽象产品通过不同组合返回不同具体的产品的对象.说起来有点抽象,我们看下UML图,在看下具体的代码可能你就清楚了定义定义:为一组相关或者相互依赖的对象提供一个接口,而不需要指定他们具体的类.使用场景:优点:相比于工厂模式,灵活,跟builder模式类似,通过不同产品的不同部件,组成新的产品.而原创 2016-02-18 00:54:54 · 603 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (19) 第19章 组合模式
前言组合模式:部分和整体的模式,结构型设计模式之一.他将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象.在android开发过程中,使用得并不多,更适用于对一些界面UI的架构设计上,组合模式和解释器模式有一定的类同,两者在迭代对象时都涉及递归的调用.定义定义:将对象组合成属性结构以表示”部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性.使用场景:表示对象原创 2016-03-03 22:52:07 · 382 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (1) 第1章 单例模式
单例模式在实际开发中用法也比较简单,一般是获取唯一实例调用其内部的静态方法.这里不多做赘述,主要记录常用的单例模式使用的三种方法单例模式-方法:1.拥有一个private构造函数,不对外开放2.通过static静态方法返回单例类对象3.确保多线程环境下,单例类的对象有且只有一个优点:1.在内存在只有一个实例,减少内存开支2.避免对资源的多重占用缺点:1.没有原创 2016-01-07 21:52:31 · 497 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (22) 第22章 外观模式
前言外观模式是封装API的常用手段.通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.定义定义:要求一个子系统的外部与内部的通信必须通过一个统一的对象进行.门面模式(Facade模式)提供一个高层次的接口,使得子系统更容易使用使用场景: 1.为一个复杂的子系统提供一个简单统一的接口,对外隐藏子系统的具体实现,隔离变化. 2.当原创 2016-04-12 16:18:45 · 252 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (21) 第21章 装饰模式
前言装饰模式其实是继承关系的一种替代方案之一,是一种对客户端透明的方式来动态地扩展对象的功能.因为近期入职了新公司,还是把设计模式都在温习一遍.正文定义:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活使用场景:需要透明且动态地扩展类的功能时和代理模式的区别:装饰模式和代理模式有点类似.装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案原创 2016-04-12 15:11:49 · 324 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (14) 第14章 迭代器模式
前言迭代器模式,又称为游标模式(Cursor);是行为型设计模式之一.迭代器模式源于对容器的访问,比如Java中List\Map\数组等,我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中.在客户访问类与容器之间插入了一个第三种–迭代器,很好地解决了上面所述的弊端.因为众多语言内部也有众多容器体的定义,也有相应的迭代器.因此迭代器模式更多的是了解而非应用.正文定义原创 2016-04-13 15:32:13 · 385 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (22) 第22章 享元模式
前言享元模式是对象池的一种实现,Flyweight,代表轻量级的意思.享元模式适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除等正文定义:使用共享对象可有效地支持大量的细粒度的对象使用场景: 1.系统中存在大量的相似对象. 2.细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特原创 2016-04-13 16:18:58 · 301 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (16) 第16章 访问者模式
前言访问者模式,是一种将数据操作和数据结构分离的设计模式.大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是真地需要它了.定义定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作.优点: 1.各角色职责分离,符合单一职责的原则 2.具有优秀的扩展性 3.使得数据结构和作用于结构上的操作解耦,使得操作集原创 2016-02-21 22:35:43 · 728 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (20) 第20章 适配器模式
适配器模式定义定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作使用场景: 1.想要建立一个重复使用的类,用于一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作. 2.需要一个统一的输出接口,而输入端的类型不可预知.UML类图Target:目标角色,也就是所期待得到的接口/** * Target原创 2016-03-08 01:27:14 · 403 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (5) 第5章 工厂模式
前言定义定义:定义一个用户创建对象的接口,让子类决定实例化哪个类使用场景:需要生成复杂对象的地方,使用该模式,如果用new的对象,就无需使用.例如:activity生命周期,onCreate()等缺点:每次为工厂方法模式添加新的产品时,就要编写一个新的产品类,同时还要引入抽象层,势必会导致类结构复杂化.UML类图根据UML类图,可以把工厂模式分为4大模块:抽象工厂:抽象父类,提供返回具体原创 2016-02-14 00:11:49 · 783 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (18) 第18章 代理模式
前言代理模式也是一种结构型的设计模式,定义定义:为其他对象提供一种代理以控制对这个对象的访问.使用场景:当无法或不想直接访问某个对象或访问某个对象困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口.UML类图UML类图通用模式代码:Subject:抽象主题类,主要作用:声明真是主题与代理的共同接口方法./** * 抽象主题类 *原创 2016-02-24 22:45:16 · 415 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (7) 第7章 策略模式
前言每天这个点,带了一天的隐形眼睛,看电脑实在有点疲劳了,不过当我看到这个策略模式简介的时候,我一下来了精神.我相信很多初级程序员想在代码质量上有所提升的时候,我们会发现我没之前封装的一些方法类,是否过于冗余??如果有新的需求,我们是否是直接在该类里面直接创建一个新的方法,不断使这个类变得臃肿,难以维护.其实策略模式总结起来还是java接口的善用,java特性抽象\封装\继承\多态也在该模式有原创 2016-02-18 01:29:12 · 424 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (8) 第8章 状态模式
前言状态模式跟策略模式跟相似,从他们两个UML类图中就可以看出.状态模式其实就是一个将if-else用多态来实例的一个具体示例.定义定义:当一个对象的类在状态改变时允许改变其行为,这个对象看起来像是改变了其类.使用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为. 2.代码中包含大量与状态有关的if-else语句,并且它必须是在运行时根据状态的改变改变它原创 2016-02-20 22:27:21 · 548 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (9) 第9章 责任链模式
前言该模式是行为设计模式之一.如果说android中该模式应用最具代表性的例子的话就是android的触摸机制.大家此时可以想想android的点击事件传递和拦截机制那幅图,就能更好的理解这个模式啦.如果想不起来也没关系,这里贴出来这个图.(以前自己画的,有点丑,大家也可以自行百度哈,不影响理解(^__^) ). 定义定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系原创 2016-02-21 00:39:06 · 382 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (10) 第10章 解释器模式
前言解释器模式如同责任链模式一样,也是一种行为型模式,只是在平时使用较少. 不过想想android计算器四则运算:加减乘除和数字表达式的解释,其实恰恰就是这种设计模式的表现定义定义:提供一种解释语言的语法或者表达式的方式优点:灵活的扩展性,在构建抽象语法树时,使用到新增的解释器对象进行具体的解释即可.缺点:对于每一条文法对应至少一个解释器,会生成大量的类.对于过于复杂的文法,并不推荐使用解释原创 2016-02-21 13:16:01 · 412 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (11) 第11章 命令模式
前言命令模式也是一种行为型的设计模式定义定义:将一系列的方法调用封装,用户只需调用一个方法执行,那么所有这些被封装的方法就会挨个执行调用.优点:更弱的耦合性,更灵活的控制性,以及更好的扩展性.缺点:类的膨胀,大量衍生类的创建UML类图commond:命令角色,定义所有具体命令类的抽象接口/** * 命令接口 * @author max * */public interfac原创 2016-02-21 14:13:08 · 466 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (13) 第13章 备忘录模式
前言备忘录模式也是一种行为模式,用来保存对象的当前状态.定义定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.优点: 1.给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态 2.实现信息的封装,使得用户不需要关心状态的保存细节缺点:消耗资源,如果累成员变量过多,势必会占用比较大的资源,而且每一次保存都能消耗一定的内存使用场景:原创 2016-02-21 15:49:39 · 563 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (15) 第15章 模板方法模式
前言这个模式也是之前见得比较少的.用一句话来形容就是:流程封装,具体实现由子类来完成.但是任意一个抽象类,都符合具体实现细节由子类完成的要求,关键在于是否有流程,有流程的叫模板方法模式,没有流程,就是抽象类的实现.定义定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 可以联想下我们平时用到的OKhttpUtils网络连原创 2016-02-21 16:28:32 · 403 阅读 · 0 评论 -
《Android源码设计模式》读书笔记 (24) 第24章 桥接模式
正文定义:将抽象部分与实现部分分离,使它们都可以独立地进行变化使用场景: 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以通过桥接模式使它们在抽象层建立一个关联关系.优点:分离抽象与实现\灵活的扩展以及对客户来说透明的实现等.UML类图Abstraction:抽象部分,该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用原创 2016-04-13 16:47:18 · 379 阅读 · 0 评论