android中常用的设计模式

来源:互联网 发布:linux安装输入法命令 编辑:程序博客网 时间:2024/04/30 13:54

1、单例模式

1. 为什么要用单例模式;

希望在系统中(或者内存中)只存在一个对象,并且这个对象可以共享(比如说数据库的创建,在应用中只需要有一个数据库,在各个类中也要用到数据库)

2 单例模式的实现:

(1)私有构造
java中的对象一般是通过公有的构造new出对象,如果把构造私有,那么就不能通过new来获取实例。

(2)定义该类的私有的静态的对象;

(3)提供一个静态的公有的的方法,用于创建或者调用
代码如下(以创建全国省,市,县数据库为例):

import android.database.sqlite.SQLiteDatabase;/** * 使用单例模式创建数据库; *  * @author yu *         1、私有构造方法;(私有构造,就不能通过new直接创建实例,这样db的实例就只能通过getInstance()的方法取得 *         ,保证在jvm中的唯一) *  *         2、定义类的实例为私有的,静态的; *  *         3、提供一个公有的静态的函数用于创建或者调用该对象(提供一个getInstance的方法,对外访问)。 */public class ChinaDb {    // 数据库名称;    public static final String DB_NAME = "china_db";    // 数据库版本;    public static final int VERSION = 1;    // 私有的有静态对象    private static ChinaDb chinaDb;    private SQLiteDatabase db;    // 私有的构造方法;    private ChinaDb(Context context) {        // TODO Auto-generated constructor stub        ChinaDbHelper dbHelper = new ChinaDbHelper(context, DB_NAME, null,                VERSION);        db = dbHelper.getWritableDatabase();    }    // 获取db的公有的静态的方法;    // 对于多线程访问的情况下,还是有可能产生多个实例的,加上synchronzied,保证线程安全;    public synchronized static ChinaDb getInstance(Context context) {        if (chinaDb == null) {            chinaDb = new ChinaDb(context);        }        return chinaDb;    }}

SQLiteOpenHelper中的代码:

package com.example.dbtest.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class ChinaDbHelper extends SQLiteOpenHelper {    //创建省;    public static final String CREATE_PROVINCE = "create table province(_id integer primary key autoincrement,province_name text,province_code text)";    //创建市;    public static final String CREATE_CITY = "create table city(_id integer primary key autoincrement,city_name text,city_code text)";    //创建县;    public static final String CREATE_COUNTRY = "create table country(_id integer primary key autoincrement, country_name text,country_code text)";    public ChinaDbHelper(Context context, String name, CursorFactory factory,            int version) {        super(context, name, factory, version);        // TODO Auto-generated constructor stub    }    @Override    public void onCreate(SQLiteDatabase db) {        // TODO Auto-generated method stub        db.execSQL(CREATE_PROVINCE);        db.execSQL(CREATE_CITY);        db.execSQL(CREATE_COUNTRY);    }    @Override    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {        // TODO Auto-generated method stub    }}

在使用的时候调用即可:

public class MainActivity extends Activity {    private ChinaDb chinaDb;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        chinaDb = ChinaDb.getInstance(this);    }}

2、适配器模式

适配器模式(Adapter):使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

我们笔记本电脑,因为国家用的是220V的电压,而笔记本电脑不是。因此就有了电源适配器。这样不管多少伏,都能把电源变成需要的电压。

这里写图片描述
适用场景:listview,gridview等都离不开适配器。在 android 中常见的适配器类有: BaseAdapter 、 SimpleAdapter 等 。


3、观察者模式:

观察者模式:定义一种(一对一或者一对多)的依赖关系,让(一个)多个对象同时监听一个主题的对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自己更新自己。
这里写图片描述

4、建造器模式:

建造器模式:将一个复杂的对象的构建与它的表示分离。使同样的构建过程可以创建不同的表示意图。
dialog的创建用到了建造器模式。
这里写图片描述

2 0
原创粉丝点击