设计模式
23 种经典的设计模式。它们又可以分为三大类:创建型、结构型、行为型。
- 创建型 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。 不常用的有:原型模式。
- 结构型 常用的有:代理模式、桥接模式、装饰者模式、适配器模式。 不常用的有:门面模式、组合模式、享元模式。
- 行为型 常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。 不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。
单例:
单例的定义:"一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。"单例模式创建的对象是进程唯一的。
我们编写的代码,通过编译、链接,组织在一起,就构成了一个操作系统可以执行的文件,也就是我们平时所说的"可执行文件"(比如 Windows 下的 exe 文件)。可执行文件实际上就是代码被翻译成操作系统可理解的一组指令,你完全可以简单地理解为就是代码本身。 当我们使用命令行或者双击运行这个可执行文件的时候,操作系统会启动一个进程,将这个执行文件从磁盘加载到自己的进程地址空间(可以理解操作系统为进程分配的内存存储区,用来存储代码和数据)。接着,进程就一条一条地执行可执行文件中包含的代码。比如,当进程读到代码中的 User user = new User(); 这条语句的时候,它就在自己的地址空间中创建一个 user 临时变量和一个 User 对象。 进程之间是不共享地址空间的,如果我们在一个进程中创建另外一个进程(比如,代码中有一个 fork() 语句,进程执行到这条语句的时候会创建一个新的进程),操作系统会给新进程分配新的地址空间,并且将老进程地址空间的所有内容,重新拷贝一份到新进程的地址空间中,这些内容包括代码、数据(比如 user 临时变量、User 对象)。 所以,单例类在老进程中存在且只能存在一个对象,在新进程中也会存在且只能存在一个对象。而且,这两个对象并不是同一个对象,这也就说,单例类中对象的唯一性的作用范围是进程内的,在进程间是不唯一的。
单例模式:
工厂模式:https://mp.weixin.qq.com/s/T3h6479P5kMVtKfXiLcc-Q
外观模式:
模板方法模式 :Activity就是用于管理窗口的 "任务和返回栈机制" 在背地里运筹帷幄,那么未来开发者继承该 "窗口原型",即可得到一个简练的 "配置模板",不仅需要一个窗口,还想要多窗口。谈到多窗口,便涉及 "窗口切换、通信" 等等,甚是麻烦,这 "脏活累活" 要是交给未来开发者干,App 又该如何快速开发 ------ 毕竟,开发者良莠不齐,API 越是复杂,就越易用错和产生不可预期问题。
组合模式:组合模式 封装 View/ViewGroup。凭借组合模式,ViewGroup 能轻易在自身内部嵌套更多 View 或 ViewGroup,从结构来看,就像套娃。
享元模式:Message的创建就是享元模式 ,从消息池取出一个消息,Message.obtain,放到需要用到的链表,没有了创建和销毁的过程,避免内存抖动。MessageQueue.quit中remove消息的时候调用recycleUnchecked()方法,并不是真的将消息干掉,而是将消息里的内容都去掉。message是有一个内存块,里面的内容处理掉之后,放到另一个消息链表,头插,每生成一个节点放到头部。
监听者模式:
适配器模式:Recycleview