Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目录

值得收藏的一些文章

---------- 创建型模式 - 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的更多相关文章

  1. Android开发中常见的设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...

  2. Android开发中常见的设计模式(一)——单例模式

    首先了解一些单例模式的概念. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这样做有以下几个优点 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中. 保持 ...

  3. Android开发中常见的设计模式(二)——Builder模式

    了解了单例模式,接下来介绍另一个常见的模式--Builder模式. 那么什么是Builder模式呢.通过搜索,会发现大部分网上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ...

  4. Android开发中常见的设计模式(四)——策略模式

    策略模式定义了一些列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变换. 假设我们要出去旅游,而去旅游出行的方式有很多,有步行,有坐火车,有坐飞机等等 ...

  5. Android开发中常见的设计模式(三)——观察者模式

    先看下这个模式的定义. 定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新 先来讲几个情景. 情景1:有一种短信服务,比如天气预报服务,一旦你订阅 ...

  6. Android开发中无处不在的设计模式——动态代理模式

    继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...

  7. Android开发中常用的设计模式

    首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...

  8. Android 开发中常见的注意点

    这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...

  9. Android开发中常见的内存泄露案例以及解决方法总结

    1.单例模式引起的内存泄露 由于单例模式的静态特性,使得它的生命周期和我们的应用一样长,如果让单例无限制的持有Activity的强引用就会导致内存泄漏如错误代码示例: public class Use ...

随机推荐

  1. BZOJ3944 Sum 数论 杜教筛

    原文链接http://www.cnblogs.com/zhouzhendong/p/8671759.html 题目传送门 - BZOJ3944 题意 多组数据(组数<=10). 每组数据一个正整 ...

  2. MySQL高级02

    索引简介 索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构.你可以简单理解为“排好序的快速查找数据结构”. 在数据之外,数据库系统还维护着满足特定查找算法的 ...

  3. day5 列表的增删改查

    1,列表的增删改查,其他操作.2,元祖.3,列表的嵌套操作.4,开一点dict. 昨日内容回顾: 字符串的方法:1,find通过元素找索引,可切片,找不到返回-12,index,找不到报错.3,spl ...

  4. oracle的DBMS_JOB相关知识

    http://langgufu.iteye.com/blog/1179235 查看当前定时任务 select job,next_date,next_sec,failures,broken from u ...

  5. scrapy 第一个案例(爬取腾讯招聘职位信息)

    import scrapy import json class TzcSpider(scrapy.Spider): # spider的名字,唯一 name = 'tzc' # 起始地址 start_u ...

  6. centos6.9安装mysql5.7.18

    详细记录在CentOS 6.9上安装MySQL 5.7.18 过程,希望对大家有所帮助. 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysq ...

  7. poj 2528 Mayor’s posters 【离散化】+【线段树】

    <题目链接> 题目大意: 往一堵墙上贴海报,依次输出这些海报张贴的范围,这些海报能够相互覆盖,问最后能够看见几张海报? 解题分析: 由于是给出每张海报的区间,所以在这些区间内的很多点可能用 ...

  8. APP开发,微信第三方登录的介绍

    去年做了一阵APP相关的开发,经常遇到第三方登陆的需求,比如微信.微博.fb的第三方登陆等等,其实主要的流程都大同小异,这里就以微信为例来介绍,希望对大家有帮助. 微信开放平台(open.weixin ...

  9. JVM之基本结构

    1. Java虚拟机的架构 1.1 Java的NIO库允许Java程序使用直接内存,访问直接内存的速度优于Java堆.出于性能的考虑,读写频繁的场合会考虑使用直接内存. 1.2 本地方法栈和Java栈 ...

  10. PTA 5-3 解题报告

    GitHub 问题描述 解题思路 代码 问题描述 5-3 计算平均值 (50分) 现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式 ...