创建型模式
单例模式:Runtime,Application
工厂方法:Collection#iterator()
抽象工厂:无
建造者模式:AlertDialog$Builder
原型:Object#clone(),Cloneable。
结构型模式
装饰者模式:BufferedInputStream,InputStream,FileInputStream组成。
Context,ContextImpl,ContextWrapper,ContextThemeWrapper,Application,Service,Activity;
Cursor,AbstractCursor,CursorWrapper;
适配者模式:Reader,InputStreamReader,InputStream。
Adapter,ArrayAdapter,ListAdapter,BaseAdapter。
BulkCursorToCursorAdapter,IBulkCursor;CursorToBulkCursorAdatpter,CrossProcessCursor;
代理模式:动态代理。IActivitymanager,ActivityManagerProxy,ActivityNanagerNative。
组合模式:View,ViewGroup组成的结构。
桥接模式:无
外观模式:Context类,以startActivity为例。
享元模式:Integer#valueOf(),Character.valueOf()。常量池。
行为型模式
模板方法模式:AbstractQueuedSynchronizer中的acquire(),acquireShared()是模板方法,而tryAcquire和tryAcquireShared是子类必须实现的方法,是模板中的子方法。其实JDK中许多Abstract类中的非抽象方法都是模板方法,所以模板方法在jdk中是很常用的。
状态模式:WifiService,WifiStateMachine,StateMachine,DefaultState,DriverUnloadedState构成了状态模式。
策略模式:Comparator以及其他使用了含有policy的类名的类很可能都涉及了策略模式
命令模式:ThreadPoolExecutor,callable,Runnable。android中的消息循环。通过handler把请求封装成一个command传给消息队列。
迭代器模式:Collection#iterator(),Iterator。Android数据库中的Cursor#moveToNext().
责任链模式:
ClassLoader的委托模式及StateMachine中的子状态及父状态之间就是一条责任链,StateMachine结合了状态模式和责任链模式。
ViewRootImpl中的InputStage设计。在ViewRootImpl#setView()中创建了责任链中的七个处理节点。代码如下:
mSyntheticInputStage = new SyntheticInputStage();
InputStage viewPostImeStage = new ViewPostImeInputStage(mSyntheticInputStage);
InputStage nativePostImeStage = new NativePostImeInputStage(viewPostImeStage,
"aq:native-post-ime:" + counterSuffix);
InputStage earlyPostImeStage = new EarlyPostImeInputStage(nativePostImeStage);
InputStage imeStage = new ImeInputStage(earlyPostImeStage,
"aq:ime:" + counterSuffix);
InputStage viewPreImeStage = new ViewPreImeInputStage(imeStage);
InputStage nativePreImeStage = new NativePreImeInputStage(viewPreImeStage,
"aq:native-pre-ime:" + counterSuffix);
mFirstInputStage = nativePreImeStage;
观察者模式:Observer,Observable。View,Listenter。广播,BroadcastReceiver。Adapter#registerDataSetOberver()及DataSetOberver。ContentProvider组件系统中的IContentService(Observable)和ContentObserver。
备忘录模式:Activity#onSaveInstanceSate(Bundle),onRestoreInstanceState(Bundle),Bundle.
中介者模式:Android中的锁屏功能就用到了中介者模式,KeyguardService
(锁屏服务)通过KeyguardViewMediator
(锁屏中介者)来协调各种Manager的状态以达到锁屏的功能。这里KeyguardService
和各种Manager等等都充当了同事的角色。
访问者模式:无
解释器模式:无
桥接模式:IContentProvider,Transport,ContentProvider。IContentProvider和Transport为Interface角色,ContentProvider为Implementation角色。