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的创建用到了建造器模式。