Android源码设计模式
文章平均质量分 85
探索Android源码中的设计模式
且听真言
努力工作,玩命生活。
展开
-
LeakCanary使用学习(未完)
1.LeakCanary 如何自动初始化LeakCanary只需添加依赖就可以实现自动初始化。LeakCanary是通过ContentProvider实现初始化的,在ContentProvider 的 onCreate方法中初始化LeakCanary。并且MainProcessAppWatcherInstaller是在主线程中初始化的。注意:ContentProvider的初始化是在Application的onCreate之前完成的,所以LeakCanary的初始化方法AppWatcher.manual原创 2022-02-27 19:11:06 · 1139 阅读 · 1 评论 -
Android设计模式之桥接模式
桥接模式介绍桥接模式也称为桥梁模式,是结构型设计模式之一。桥接模式的定义将抽象部分与实现部分分离,使它们都可以独立进行变化。桥接模式的使用场景从模式定义中我们了解到,这里“桥梁的”作用其实就是连接“抽象部分”与“实现部分”,但事实上,任何多维度变化类或者说多个树状类之间的耦合都可以使用桥接模式来实现解耦。如果一个系统需要在构建的抽象化角色和具体角色之间增加更多灵活性,避免在...原创 2019-01-06 11:51:36 · 543 阅读 · 0 评论 -
android设计模式之外观模式
外观模式的介绍外观模式在开发中使用较高,尤其在现阶段,第三方SDk的使用。SDK大多使用外观模式。通过一个外观类是的整个系统的接口只有一个统一的高层接口,这样就能降低用户成本,也对用户屏蔽了很多实现细节。外观模式也是我们封装API的常用手段,例如网络模块、ImageLoader模块等。外观模式的使用场景1.为一个复杂子系统提供一个简单的接口。子系统往往因为不断演化而变得...原创 2019-01-05 10:30:02 · 391 阅读 · 0 评论 -
android设计模式之享元模式
享元模式是对象池的一种实现,它的英文名是Flyweight,代表轻量级的意思。享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象。从而达到对象共享、避免创建过多对象的效果,这样一来就可以提升性能、内存溢出等问题。享元对象中的部分状态是可以共享的,可以共享的状态称为内部状态,内部状态不会随着环境的变化而变化;不可共享的状态称为外部状态,它们会随着环境的改变...原创 2019-01-03 19:26:13 · 388 阅读 · 0 评论 -
android设计模式之装饰模式
装饰模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),结构型设计模式之一,其使用一种对客户端透明的方式来动态扩展对象的功能,同时它也是继承关系的一种替代方案之一。(组合方案也是继承关系的一种替代方案)。 装饰模式的定义动态给一个对象添加一些额外的职责。就增加功能来说,装饰模式生成子类更加灵活。 装饰模式的使用场景需要透明且动态地扩展...原创 2019-01-01 09:35:35 · 821 阅读 · 0 评论 -
Android设计模式之适配器模式
适配器模式的定义适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的使用场景1.系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。2.想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括可能在将来引进的类一起工作。3.需要一个统一的输出接口,而输入端的类型不可预知。...原创 2018-12-31 13:10:28 · 277 阅读 · 0 评论 -
android设计模式之组合模式
组合模式(Composite Pattern)也称为部分整体模式(Part-Whole Pattern),结构型设计模式之一,组合模式比较简单,它将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。组合模式的定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一...原创 2018-12-30 15:56:32 · 371 阅读 · 0 评论 -
Android设计模式之代理模式
代理模式(Proxy Pattern)也称为委托模式。代理模式的定义为其它对象提供一种代理以控制对这个对象的访问。代理模式的使用场景当无法或者不想直接访问某个对象或者访问某个对象存在困难时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。代理模式的UML类图 角色介绍:Subject:抽象主题类该类的主...原创 2018-12-29 15:14:30 · 765 阅读 · 0 评论 -
android设计模式之中介者模式
中介者模式包装了一系列对象相互作用的方式,使得对象不必相互明显作用。使它们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。 Mediator:抽闲中介者角色,定义了同事对象到中介者对...原创 2018-12-28 19:31:31 · 388 阅读 · 0 评论 -
Android设计模式之访问者模式
访问者模式是一种将数据库操作与数据结构分离的设计模式。访问者模式的基本思想 软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个visit方法,这个方法对访问的对象结构中不同类型的元素 做出不同的处理 。在对象结构的一次访问方法中,我们遍历整个对象结构,对每一个元素...原创 2018-12-22 10:05:03 · 376 阅读 · 0 评论 -
Android源码设计模式之模板方法模式
在面向对象开发中,通常会遇到这样一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下:1.检查代码的正确性;2.链接相关的类库;3.编译相关的代码;4.执行程序;对于不同的程序设计语言,上述4个步骤是不一样的,但是,它们的执行流程是固定的,这类问题的解决...原创 2018-12-20 19:39:26 · 213 阅读 · 0 评论 -
Android设计模式之迭代器模式
迭代器模式又称游标模式, 是行为型设计模式之一。迭代器模式源于对容器的访问,比如Java中的List、Map、数组等。对容器对象的访问必然会涉及到遍历算法,可以将遍历算法封装在容器中,或者不提供遍历算法。如果将遍历算法封装在容器中,那么容器类就承担了过多的功能,容器类不仅要维护自身内部的数据元素,而且还要对外提供遍历的接口方法,因为遍历状态的存储问题还不能对同一个容器同时进行多个遍历操作,如果...原创 2018-12-18 19:21:08 · 284 阅读 · 0 评论 -
android设计模式之备忘录模式
备忘录模式的使用场景1.需要保存一个对象在某一个时刻的状态或部分状态。2.如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访其内部状态,通过中间对象可以访问其内部状态。 1.Originator:负责创建一个备忘录,可以记录、恢复自身的内部状态。同时Originator还可以根据需要决定Memento存储自身哪些内部...原创 2018-12-16 09:29:26 · 926 阅读 · 1 评论 -
Android设计模式之观察者模式
观察者模式使用率较高,因为这个模式最重要的作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。观察者模式的定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。观察者模式的使用场景关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。事件多级触发场景。跨系统的消息交换场景,如消息...原创 2018-12-15 10:12:01 · 253 阅读 · 0 评论 -
Android设计模式之命令模式
命令模式是行为型设计模式之一,命令模式大概是将一系列的方法调用封装,用户只需要调用一个方法执行,那么所有这些被封装的方法就会被挨个执行调用。命令模式的定义将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式的使用场景1.需要抽象出待执行的动作,然后以参数的形式提供出来——类似于过程设计中的回调机制,而命令模式正...原创 2018-12-09 10:45:01 · 389 阅读 · 0 评论 -
Android设计模式之解释器模式
解释器模式(Interpreter Pattern),是一种用的比较少的行为型设计模式,其提供了一种解释语言的语法或表达式的方式。该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。解释器模式的定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言的句子。解释器模式的使用场景1.如果某个简单的语言需要解释执行,而且可以将该语言中的语句表示为...原创 2018-12-05 20:03:46 · 341 阅读 · 0 评论 -
android设计模式之责任链模式
责任链模式介绍责任链模式(Iterator Pattern),是行为型设计模式之一。什么是“链”?我们将多个节点首尾相连所构成的模型称为链。将每一个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直到有对象处理这个请求为止,这种模式称为责任链模式。责任链模式的定义使多个对象都有机会处理请求,从而避免了请求的发送者和...原创 2018-12-02 09:50:25 · 223 阅读 · 0 评论 -
Android设计模式之状态模式
状态模式定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式的使用场景1.一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。2.代码中包含大量与对象状态有关的条件语句,例如,一个操作中包含于庞大的多分支语句(if-else或switch-case),且这些分支依赖于该对象的状态。状态模式将每一个条件分支放入一个独立的类中...原创 2018-11-25 10:43:28 · 3627 阅读 · 0 评论 -
Android设计模式之策略模式
策略模式的定义:策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的使用场景:1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。2.需要安全封装多种同一类型的操作时。3.出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体的子类时。策略模式UML图...原创 2018-11-18 10:12:16 · 340 阅读 · 0 评论 -
Android设计模式之抽象工厂
抽象工厂模式的定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。抽象工厂的使用场景一个对象族有相同的约束时可以使用抽象工厂模式。举个例子:Android、ios、window phone下都有短信软件和拨号软件,两者都属于软件的范畴,但是它们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这时候就考虑使用抽象工厂方法模式...原创 2018-11-18 09:53:20 · 251 阅读 · 0 评论 -
android设计模式之工厂模式
工厂方法模式,是创建型设计模式之一。工厂方法模式是一种结构简单的模式,在我们平时开发中应用广泛。Android中的activity里的各个生命周期方法,以onCreate为例,它就可以看做是一个工厂方法,我们可以在其中构造我们的View并通过setContentView返回给framework处理。 工厂方法模式的定义定义一个创建对象的接口,让子类决定实例化哪个类。 ...原创 2018-11-11 11:07:22 · 3575 阅读 · 0 评论 -
Android设计模式之原型模式
原型模式的定义:用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。 原型模式的使用场景:1.类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型复制避免这些消耗。2.通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式。3.一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式...原创 2018-11-04 10:17:19 · 291 阅读 · 0 评论 -
Android设计模式之Builder模式
Builder模式的定义将一个复杂对象的 构建 与它的 表示 分离,使得同样的构建过程可以创建不同的表示。Builder模式的使用场景1.相同的方法,不同的执行顺序,产生不同的结果。2.多个部件或零件,都可以装配到一个对象中,但产生的运行结果又是不同时。3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个时候适合使用构造者模式。4.当初始化一个对象特别复杂,...原创 2018-11-04 10:09:52 · 372 阅读 · 0 评论 -
Android设计模式之单例模式
单例模式的定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 实现单例模式的关键点:1.构造函数不对外开放,一般为private。2.通过一个静态方法或者枚举返回单例类对象。3.确保单例类的对象有且只有一个,尤其是在多线程环境下。4.确保单例类对象在反序列化时不会重新构建对象。 1.饿汉式 单例模式 (在声明的时候已经初始化了)pub...原创 2018-11-04 10:09:33 · 9876 阅读 · 0 评论