合同设计模式广泛使用android

时间:2014-11-19 16:13:22

标签: java android design-patterns

我注意到Android默认应用的开发者使用的是契约模式。它经常用于数据库,内容提供商。契约类是final并存储常量,对我来说奇怪的是内部接口。

public final class ClockContract 
protected interface AlarmsColumns extends AlarmSettingColumns, BaseColumns
protected interface InstancesColumns extends AlarmSettingColumns, BaseColumns 
protected interface CitiesColumns

所有这些类(和接口)都是常量的容器。做这样的好方法吗?为什么不在每个班级定义它们? 将变量存储在接口中是一种好习惯 对我来说最堰的是内部接口的puprose。请解释一下这个想法。
感谢

1 个答案:

答案 0 :(得分:0)

合同基本上是用于一组指定目的的定义列表。这是一种很好的做法,因为人们不会滥用不相关域中的所有类和接口。

public final class DatabaseContract {
/***Inner class that defines the table contents.***/
public static abstract class Entry implements BaseColumns {
    public static final String
            TABLE_NAME = "Alarms",
            COLUMN_NAME_ENTRY_DAY = "day",
            COLUMN_NAME_ENTRY_HOUR = "hour",
            COLUMN_NAME_ENTRY_MINUTE = "minute",
            COLUMN_NAME_ENTRY_STATUS = "status",
            COLUMN_NAME_ENTRY_ALARM_TEXT = "alarmtext";
}

private DatabaseContract(){}

public static void init(Context context){
    new DatabaseHelper(context);
}

public static Cursor selectAll(Context context){
    String sql = "SELECT * FROM " + TABLE_NAME;

    return new DatabaseHelper(context).getReadableDatabase().rawQuery(sql,null);
}

public static void insert(Context context, ContentValues values){
    new DatabaseHelper(context).getWritableDatabase().insert(TABLE_NAME, null, values);
}

public static void update(Context context, int id, ContentValues values){
    new DatabaseHelper(context).getWritableDatabase().update(TABLE_NAME, values, Entry._ID + " = " + id, null);
}

public static void remove(Context context, int id){
    new DatabaseHelper(context).getWritableDatabase().delete(TABLE_NAME, Entry._ID + " = " + id, null);
}}

上面的代码是合约模式的一个例子。很明显,除了访问数据库之外,您不会在其他地方使用内部类Entry。就像你创建一个枚举来支持你的类,你可能想要限制类函数的输入参数。

如果您不需要处理对变量的多重访问,则可以在变量中存储变量。但是,它不应该这样做,因为合同是存储定义和协议的意思。这些东西不应该在运行时改变。