android中常用的设计模式

本文深入介绍了单例模式、适配器模式、观察者模式及建造者模式。详细解释了每种模式的应用场景、原理及实现方式,特别是针对Android开发中的实际案例进行了分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的创建用到了建造器模式。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值