Android开发中常见的设计模式 MD
Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 |
---|---|---|---|---|
MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
目录
---------- 创建型模式 - 6个 ----------
- 单例模式
- 建造者模式
- 原型模式
- 工厂模式3个
---------- 行为型模式 - 11个 ----------
- 策略模式
- 观察者模式
- 模板方法模式
- 责任链模式
- 备忘录模式
- 命令模式
解释器模式
迭代器模式
状态模式
中介者模式
访问者模式
---------- 结构型模式 - 7个 ----------
- 装饰器模式
- 组合模式
- 代理模式
- 适配器模式
- 门面模式
- 亨元模式
桥接模式
值得收藏的一些文章
- 一篇超实用博客:Android开发中常见的设计模式
- 四月葡萄的系列文章
- xxq2dream的系列文章
- Android设计模式之23种设计模式一览
- Android设计模式简单理解
- android源码中的设计模式
---------- 创建型模式 - 6个 ----------
- 单例模式
懒汉式、饿汉式、静态内部类、双重锁检查、枚举
- 建造者模式
最明显的标志就是使用Build类
AlterDialog、Notification
各大开源框架广泛使用 Gson、Okhttp
- 原型模式
更快的获取到一个相同属性的对象
Intent、OkHttpClient
- 工厂模式3个
简单工厂(静态工厂)、工厂方法、抽象工厂
BitmapFactory、MediaPlayerFactory、Executors线程池工厂类
---------- 行为型模式 - 11个 ----------
- 策略模式
封装算法
出行策略:公交车、的士、自驾策略下的费用、时间计算等
插值器、估值器、缓存策略,增删改查策略
- 观察者模式
监听器、点击事件、滚动事件
rxjava、eventbus、广播
架构组件Livedata
- 模板方法模式
定义算法的骨架、结构、流程,细节由子类实现
Activity生命周期
BaseFragment里面定义的getLayout、initView、懒加载onLazyLoad
- 责任链模式
需要指定处理链,屏蔽了请求的处理过程,客户端不需要知道请求会被哪些对象处理
事件分发机制、有序广播、审批流程
ClassLoader的双亲委托模型
- 备忘录模式
捕获一个对象的内部状态,并在该对象之外保存,以便需要时恢复到原先保存的状态
Activity的onSaveInstanceState,保存Bundle类型的savedInstanceState,当Activity重建时可以恢复状态
- 命令模式
将来自客户端的请求封装为一个独立的对象,将行为请求者与行为实现者解耦,可以实现对请求进行排队、撤消、记录请求日志等
Handler机制,Runnable、Callable等接口的设计
广播、eventbus
解释器模式
正则表达式Pattern
时间格式化Format、Html格式化、Integer.parseInt解析、SQL解析
解释加减乘除、或与非
迭代器模式
把对容器中包含对象的访问委让给外部类,使用Iterator按顺序进行遍历访问
比如至少提供hasNext()和next()方法
所有的集合都有 Iterator iterator() 方法
状态模式
根据内部的状态动态的选择行为;状态改变的时候会改变其行为;状态改变的时候其行为也随之改变
把所研究的对象的行为包装在不同的状态对象里
登录状态、未登录状态下用户的行为
中介者模式
房屋中介
将网状结构转化成星型结构,可以避免同事类之间的过度耦合
同事对象只知道中介者而不知道其他同事对象,同事类之间必须通过中介者才能进行消息传递
访问者模式
相对比较复杂的一个,项目中可能见得非常少。
把数据结构和作用于结构上的操作解耦合,适用于数据结构稳定、算法易变的系统
案例:领导(CEO、CTO、Leader)对员工(程序员、产品、测试)进行考核
---------- 结构型模式 - 7个 ----------
- 装饰器模式
扩展功能,相比于继承基类来扩展功能,使用装饰器模式更加的灵活
解决类膨胀、类爆炸、继承体系臃肿的问题
Context和它的包装类ContextWrapper(其实并没有增强功能)
IO流中的BufferReader
- 组合模式
View和ViewGroup的组合、文件结构File
集合List的add和addAll
树、递归、叶子结点
- 代理模式
AIDL、Binder
静态代理、动态代理
Proxy、Cglib
ActivityManagerProxy代理ActivityManagerService
- 适配器模式
listview、recycleview、ViewPage
流类型转换InputStreamReader、OutputStreamWriter
集合和数组类型转换 Arrays.asList()
- 门面模式
医院的接待、功能的封装(工具类)
Context与ContextImpl
- 亨元模式
String常量池、Integer、Message常量池
享元对象能做到共享的关键是区分内部状态和外部状态
一般需要用到单例模式、工厂模式、HashMap
降低内存中对象的数量,节省内存,但使系统将变得复杂,且在读取外部状态时耗时增加
桥接模式
车的轮胎,人的衣服
业务抽象角色引用业务实现角色,业务抽象角色的部分实现是由业务实现角色完成的
将一个系统的抽象部分和实现部分分离,使它们都可以独立地进行变化
Window 与 WindowManager、应用层与Native层之间的交互
2019-4-1
Android开发中常见的设计模式 MD的更多相关文章
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
- Android开发中常见的设计模式(一)——单例模式
首先了解一些单例模式的概念. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这样做有以下几个优点 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中. 保持 ...
- Android开发中常见的设计模式(二)——Builder模式
了解了单例模式,接下来介绍另一个常见的模式--Builder模式. 那么什么是Builder模式呢.通过搜索,会发现大部分网上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ...
- Android开发中常见的设计模式(四)——策略模式
策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变换. 假设我们要出去旅游,而去旅游出行的方式有很多,有步行,有坐火车,有坐飞机等等 ...
- Android开发中常见的设计模式(三)——观察者模式
先看下这个模式的定义. 定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新 先来讲几个情景. 情景1:有一种短信服务,比如天气预报服务,一旦你订阅 ...
- Android开发中无处不在的设计模式——动态代理模式
继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...
- Android开发中常用的设计模式
首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...
- Android 开发中常见的注意点
这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...
- Android开发中常见的内存泄露案例以及解决方法总结
1.单例模式引起的内存泄露 由于单例模式的静态特性,使得它的生命周期和我们的应用一样长,如果让单例无限制的持有Activity的强引用就会导致内存泄漏如错误代码示例: public class Use ...
随机推荐
- root用户无法通过ssh连接Linux系统
ssh协议为了安全,有些版本默认禁止root用户的登陆 cd /etc/ssh 编辑sshd_config文件 cat sshd_config | grep PermitRootLogin Permi ...
- img 标签的 usemap 属性
<img src="1.gif" alt="Planets" usemap="#Map"/> <map name=&quo ...
- JQ JS复制到剪贴板
示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- Ubuntu18.04上安装Docker CE
建立 REPOSITORY 1.更新索引包 更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的地址,这样才能获取到最新的软件包 sudo ...
- L3-002 特殊堆栈 (30 分) 模拟stl
堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除).本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的 ...
- HDU 2586 How far away ?(经典)(RMQ + 在线ST+ Tarjan离线) 【LCA】
<题目链接> 题目大意:给你一棵带有边权的树,然后进行q次查询,每次查询输出指定两个节点之间的距离. 解题分析:本题有多重解决方法,首先,可用最短路轻易求解.若只用LCA解决本题,也有三种 ...
- Django之url路由
Django之url路由 url路由介绍 url路由是关联url及其视图函数关系的过程. 作用就是使views里面处理数据的函数与请求的url建立映射关系 url路由配置 Django的url路由配置 ...
- 001.Linux开机启动过程
相关Linux启动过程解析,此作为通用启动参考:
- basename
我使用过的Linux命令之basename - 去掉文件名的目录和后缀 本文链接:http://codingstandards.iteye.com/blog/840784 (转载请注明出处) 用途 ...
- DRF 权限 频率
DRF的权限 权限是什么 大家之前都应该听过权限~那么我们权限到底是做什么用的呢~~ 大家都有博客~或者去一些论坛~一定知道管理员这个角色~ 比如我们申请博客的时候~一定要向管理员申请~也就是说管理员 ...