组合模式

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

更多相关文章

  1. android中访问本机服务器的方法
  2. Android中使用imageviewswitcher 实现图片切换轮播导航的方法
  3. Android NDK环境创建方法简介
  4. Unity3D和Android之间的方法交互(jar模式)
  5. Android BootLoader及两种刷机模式fastboot和recovery
  6. 一种在android中实现MVP模式的新思路

随机推荐

  1. MySql中 is Null段判断无效和IFNULL()失
  2. MySql关于null的函数使用分享
  3. MySql 如何实现无则插入有则更新
  4. MySQL慢查询以及重构查询的方式记录
  5. 详解MySQL中的pid与socket
  6. MySQL 如何设计统计数据表
  7. 浅谈MySQL 亿级数据分页的优化
  8. 解析MySQL binlog
  9. 详细谈谈MYSQL中的COLLATE是什么
  10. 深入探究Mysql模糊查询是否区分大小写