更新时间:2022-08-17 14:22:35
1.单例模式:
1.两次判断法:在getInstance()中先判断是否为null,不为null就不进入加锁区,进入加锁区之后再判断一次。
2.静态成员变量法:使用类的构造方法时初始化静态变量,创建唯一的静态实例
3.按需创建:使用内部类,在不调用getInstance()的情况下,不会加载内部类
4.枚举单例:以上的几个方式在反序列化的时候都会出现重新创建对象的问题,而枚举单例不会,其默认是线程安全的。、
5.例子:LayoutInflater用的就是单例,其是通过ContextImpl的getService()获得的,在该类被第一次加载的时候会使用HashMap注册各种Service用ServiceFetcher包裹,其中就包括LayoutInflater。
6.深入理解LayoutInflater:ServiceFetcher需要实现createService()返回具体的Service,LayoutInflater是通过PolicyManger的makeNewLayoutInflater()创建的,这个类是一个代理类,具体的实现在Policy中,在Policy中返回了一个PhoneLayoutInflater。这个类覆写了LayoutInflater的onCreateView(),为传入的View找到具体路径。rInflate()是解析xml最核心的方法:其通过深度优先遍历的方式来构建传入的xml文件中的视图树,每解析到一个View就递归调用rInflater(),直到这个路径下的最后一个元素然后再回溯将该View添加到parent中。
7.运用单例模式:在ImageLoader中使用该模式
8.优缺点:1.减少内存开支 2.减少性能开销 3.避免对一个西苑的多重占用 4.便于全局访问1.没有接口扩展困难 2.单例持有Context容易造成内存泄露,所以推荐使用Application的Context。
2.Builder模式:适用于:对象初始化复杂、产品类复杂不同调用顺序产生最终类型不同、方法不同调用顺序产生最终结果不同。链式调用直观。
3.原型模式:用户通过从一个样板对象中克隆出一个内部属性一致的对象。(跳过)
4.工厂方法模式:定义一个用于创建对象的接口。让其子类决定实例化哪个对象。复杂的对象时候用这个模式,直接可new的对象不需要用。
5.抽象工厂模式:(跳过)
6.策略模式:策略模式定义了一堆算法并封装起来,使得他们可以互相替换,让算法独立于客户端变化。适用于:一类问题有多种处理方式、同一抽象类有多个子类需要使用if或switch来选择。
7.状态模式:结构和策略模式基本一致,但是状态模式是不可内替换的,其只是将对象不同的行为包装在不同的对象中,让状态对象有个抽象基类。当一个对象的行为取决于状态或者有许多开关就可以用。
8.责任链模式:许多对象都有机会处理某些请求,并且有先后顺序,此时为了避免请求者和接收者的耦合,将接收者对象按照一定的顺序连成一条链式结构,并将请求沿着链传递。
9.解释器模式:用的少跳过
12.备忘录模式:保存对象当前状态,在之后恢复状态
1.源码例子:Activity非正常销毁的时候会使用这个模式。
13.迭代器模式:Java的迭代器