Android:Android涉及到的设计模式

组合模式

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。其实用的就是最简单的命令模式。
Android:Android涉及到的设计模式_第1张图片

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的实现类上。

你可能感兴趣的:(设计模式,android)