组合模式

Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。
组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。

将对象View和ViewGroup组合成树形结构以表示”部分-整体”的层次结构(View可以做为ViewGroup的一部分)。
组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。

建造者模式

在Android中经常要使用AlertDialog来显示一些简单的窗口,通常的写法类似下面的代码 :

AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("提示")          .setMessage("确定退出?").create(); dialog.show(); 

可以看到dialog是通过Builder创建的,那么Builder是如何同AlertDialog协同工作的呢?其实AlertDialog的创建就是使用Builder模式,废话不多说,直接上代码吧。

备忘录模式

Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态。以便可以恢复Activity在onDestory之前保存的信息。

状态模式

View.onVisibilityChanged方法,就是提供了一个状态模式的实现,允许在View的visibility发生改变时,引发执行onVisibilityChanged方法中的动作。比如View的GONE,VISIBLE状态发生改变时,行为改变。

单例模式

android中有很多系统级别的全局变量,如时间,输入法,账户,状态栏等等,android中对这些都直接或者有些间接用到了单例模式。

观察者模式

在Android中,最典型的观察者模式就是”广播“。
(1)TimelineReceiver是观察者;
(2)重写OnReceive方法,来定义当收到状态变化时,订阅者的行为;

class TimelineReceiver extends BroadcastReceiver { // 1   @Override    public void onReceive(Context context, Intent intent) { // 2     cursor.requery(); // 3     adapter.notifyDataSetChanged(); // 4     Log.d("TimelineReceiver", "onReceived");    }  }  

命令模式

android中用到许多多线程多进程,所以必然大量使用到Runbable,Thread。其实用的就是最简单的命令模式。

public interface Runnable {    public abstract void run();}

调用者Thread简化版代码:

//命令模式这里不需要继承Runnable接口,但是这里考虑到实际情况,比如方便性等,继承了Runnable接口,实现了run方法,这个是Thread自身的运行run的方法class Thread implements Runnable {    private Runnable target;    public Thread(Runnable target) {        this.target = target;    }     public synchronized void start() {        if (threadStatus != 0 || this != me)            throw new IllegalThreadStateException();        group.add(this);        start0();//这个是本地方法,调用run方法        if (stopBeforeStart) {            stop0(throwableFromStop);        }    }    //可选    public void run() {        if (target != null) {            target.run();        }    }}

客户端只需要new Thread(new Runnable(){}).start()就开始执行相关的一系列的请求,这些请求大部分都是实现Runnable接口的匿名类。

中介者模式

如Resource.getDrawable方法的实现逻辑是这样的:创建一个缓存来存放所有已经加载过的,如果getDrawable中传入的id所对应的Drawable以前没有被加载过,那么它就会根据id所对应的资源类型,分别调用XML解析器生成,或者通过读取包中的图片资源文件来创建Drawable。

而Resource.getDrawable把涉及到多个对象、多个逻辑的操作封装成一个方法,就实现了一个调解者的角色。

代理模式

假设一个Activity A去绑定一个Service S,那么A调用S中的每一个方法其实都是通过系统的Binder机制的中转,然后调用S中的对应方法来做到的。Binder机制就起到了代理的作用。

适配器模式

对于android开发者来说起,适配器模式简直太熟悉不过,有很多应用可以说是天天在直接或者间接的用到适配器模式,比如ListView。
ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)。
正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android系统配置数据库注释(settings.db)
  7. Android中dispatchDraw分析
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. Android HAL 层框架分析以及代码示例
  2. 在Android中使用SVG图遇到的坑
  3. Qt for Android(安卓)编译纯C工程
  4. qcts--快速使用Android CTS进行测试和Deb
  5. Galaxy Nexus 和 Android Ice Cream Sand
  6. Android我还可以相信你多少系列文章二之
  7. 掌握Android中的进程和线程
  8. Android(安卓)App自适应draw9patch不失真
  9. Android系统原理及开发要点详解
  10. Android之AIDL实现Demo