Android开发中常见的设计模式
目录
值得收藏的一些文章
- 一篇超实用博客: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-04-06
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/10660659.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现