23种设计模式和在JDK/Android源码中的应用

来源:互联网 发布:淘宝vip专享 编辑:程序博客网 时间:2024/06/05 04:01

设计模式在Android源码中的应用

只是列个大纲供学习完设计模式后复习用,包含一句话总结和JDK/Android SDK中的例子。详细的解析参考其他分析文章

创建型模式

1.工厂方法模式(Factory method pattern)

抽象创建实例的方法

  • Iterable

2.抽象工厂模式(Abstract factory pattern)

抽象一系列创建实例的方法

  • PreferencesFactory
  • Dictionay

3.生成器模式/建造模式(Builder Pattern)

实例创建过程可控

  • Dialog.Builder
  • Notification.Builder
  • Uri.Builder

4.单例模式(Singleton)

保证实例唯一

  • Runtime
  • InputMethodManager

5.原型模式(Prototype pattern)

复制粘贴

  • Intent.clone
  • Bundle.clone
  • GregorianCalendar.clone

结构型模式

6.适配器模式/包装(Adapter/Wrapper)

A接口转B接口

  • Arrays.asList:T[] -> List<T>

7.装饰模式/修饰模式(Decorator)

A接口转A+接口

  • Context的ContextImpl实现和ContextWrapper继承树
  • java.io中的流

8.代理模式(Proxy Pattern)

A接口转A接口

  • Collections.synchronizedXXX

9.外观模式(Facade)

A1A2A3B1B2C1C2C3C4接口转ABC接口

  • JNI?不是很确定。

10.桥接模式(Bridge)

A继承B转A和B,A和B都能独自扩展

  • MVP
  • AdapterView-Adapter

11.组合模式(Composite)

大卡车和小轿车都是汽车,大卡车能拉小轿车

  • 透明方式:
  • 安全方式:View-ViewGroup

12.享元模式(Flyweight Pattern)

SpaceX,回收接着用,炸了/还没回来又需要新的话,再造一个

  • Message.obtain
  • Executors.newCachedThreadPool

行为型模式

13.策略模式(Strategy pattern)

定义好行为的接口,调用者固定,实现不同导致行为不同

  • 动画插值器Interpolator
  • RecyclerView-LayoutManager

14.模板方法模式(Template method pattern)

定义好方法,调用者固定,实现者按规矩实现

钩子方法

  • View的draw(Canvas)
  • ViewGroup的layout(boolean,int,int,int,int)
  • ViewGroup的onInterceptTouchEvent(MotionEvent)
  • 生命周期函数
  • Activity的onSaveInstanceState(Bundle)、onRestoreInstanceState(Bundle)
  • SqliteOpenHelper的onCreate、onUpdate

15.观察者模式(Observer pattern)

一个通知多个

  • Adapter的DataSetObserver
  • ViewTreeObserver
  • TextWatcher
  • LifecycleObserver

16.迭代器模式(Iterator pattern)

统一遍历模式,遍历行为可控

  • Iterator
  • Cursor
  • Enumeration

17.责任链模式(Chain-of-responsibility pattern)

踢皮球

  • View事件分发
  • 有序广播

18.命令模式(Command pattern)

可重复、可取消地执行

  • Handler-Looper-Message
  • ExecutorService

19.备忘录模式(Memento pattern)

存档-读档

  • Activity-savedInstanceState
  • Fragment-arguments

20.状态模式(State pattern)

将大量条件判断转为状态类

  • 没找到

21.访问者模式(Visitor pattern)

收件人(数据)-分拣站(数据结构)-快递员(访问者),数据结构不变、访问者频繁变动下使用。

快递员(访问者)知道每个具体收件人(动态分配),分拣站(数据结构)存有收件人信息供快递员访问。

快递员(访问者)增减不会影响整个系统,只需新增快递员认路(实现访问者方法)即可,而当收件人变动时所有快递员都需要认路。

违反了最少知道原则(快递员需要知道每个具体收件人)。

很少使用。

  • 没找到

22.中介者模式(Mediator pattern)

n->n 转 n->1->n

  • EventBus
  • 广播
  • PenddingIntent

23.解释器模式(Interpreter pattern)

内嵌其他语言

  • Runtime.exec