在编程语言里面有很多的模式一个有 24种 如单例设计模式   

本篇文章要讲的是Android内容观察者模式 

内容观察者一般使用与观察某个数据有没有发生改变  如果改变的就发生一个消息给内容观察者调用onChange()方法

例子:   当我第一次查询数据库是数据放入一个集合中    数据库如果发生改变   使用内容观察者告诉集合是否要重写查询内容

ublic class LockAppDao {

private final LockAppDb db;
private Context context;
public LockAppDao(Context context){
db = new LockAppDb(context);
this.context=context;
}
public List<String> findAll(){
List<String> datalist = new ArrayList<String>();
SQLiteDatabase sql = db.getReadableDatabase();
Cursor query = sql.query(LockAppDb.TABLE_NAME, new String[]{"packname"}, null,null, null, null, null);
while (query.moveToNext()){
String packName=query.getString(0);
datalist.add(packName);
}
query.close();
sql.close();
return datalist;
}
public boolean add(String packname){
SQLiteDatabase sql = db.getWritableDatabase();
ContentValues value = new ContentValues();
value.put("packname",packname);
long id=sql.insert(LockAppDb.TABLE_NAME,null,value);
if (id>0){
//只要数据发送改变就大吼一声
Uri uri=Uri.parse("content://com.phonesafe.dataChange");
context.getContentResolver().notifyChange(uri,null);
}
return id>0;
}
public boolean delete(String packname){

SQLiteDatabase sql = db.getWritableDatabase();
long id=sql.delete(LockAppDb.TABLE_NAME,"packname=?",new String[]{packname});
if (id>0){
//只要数据发送改变就大吼一声
Uri uri=Uri.parse("content://com.phonesafe.dataChange");
context.getContentResolver().notifyChange(uri,null);
}
return id>0;
}
public boolean find(String packname){
SQLiteDatabase sql = db.getReadableDatabase();
Cursor query = sql.query(LockAppDb.TABLE_NAME, new String[]{"packname"}, "packname=?", new String[]{packname}, null, null, null);
return query.moveToNext();
}
}

内容提供者   :类   触发内容提供者调用onChange()方法   一般是内部类

@Override
public void onCreate() {

//注册内容观察者 就是初始化 配置清单文件差不多
Uri uri=Uri.parse("content://com.phonesafe.dataChange");
innerContent = new InnerContent(new Handler());
getContentResolver().registerContentObserver(uri,true, innerContent);
}

//内容观察者
class InnerContent extends ContentObserver{
//构造方法
public InnerContent(Handler handler) {
super(handler);
}
//当数据发送改变时调用
@Override
public void onChange(boolean selfChange) {
findAllData = dao.findAll();
}
}