`

让class只有一个实例的例子

阅读更多
最近在学习android 的webkit,看到一些自己认为是好的代码或者方式就把它记录下来,方便以后复习与借鉴。
WebViewDatabase是一个单实例对象,通过getInstance方法获取WebViewDatabase的实例。WebViewDatabase是WebKit模块中的内部对象,仅供WebKit框架内部使用。
	private static WebViewDatabase mInstance = null;
private WebViewDatabase() {
		// Singleton only, use getInstance()
	}

public static synchronized WebViewDatabase getInstance(Context context) {
		if (mInstance == null) {
			mInstance = new WebViewDatabase();
			mDatabase = context.openOrCreateDatabase(DATABASE_FILE, 0, null);

			// mDatabase should not be null,
			// the only case is RequestAPI test has problem to create db
			if (mDatabase != null && mDatabase.getVersion() != DATABASE_VERSION) {
				mDatabase.beginTransaction();
				try {
					upgradeDatabase();
					mDatabase.setTransactionSuccessful();
				} finally {
					mDatabase.endTransaction();
				}
			}

			if (mDatabase != null) {
				// use per table Mutex lock, turn off database lock, this
				// improves performance as database's ReentrantLock is expansive
				mDatabase.setLockingEnabled(false);
			}

			mCacheDatabase = context.openOrCreateDatabase(CACHE_DATABASE_FILE,
					0, null);

			// mCacheDatabase should not be null,
			// the only case is RequestAPI test has problem to create db
			if (mCacheDatabase != null
					&& mCacheDatabase.getVersion() != CACHE_DATABASE_VERSION) {
				mCacheDatabase.beginTransaction();
				try {
					upgradeCacheDatabase();
					bootstrapCacheDatabase();
					mCacheDatabase.setTransactionSuccessful();
				} finally {
					mCacheDatabase.endTransaction();
				}
				// Erase the files from the file system in the
				// case that the database was updated and the
				// there were existing cache content
				CacheManager.removeAllCacheFiles();
			}

			if (mCacheDatabase != null) {
				// use InsertHelper for faster insertion
				mCacheInserter = new DatabaseUtils.InsertHelper(mCacheDatabase,
						"cache");
				mCacheUrlColIndex = mCacheInserter
						.getColumnIndex(CACHE_URL_COL);
				mCacheFilePathColIndex = mCacheInserter
						.getColumnIndex(CACHE_FILE_PATH_COL);
				mCacheLastModifyColIndex = mCacheInserter
						.getColumnIndex(CACHE_LAST_MODIFY_COL);
				mCacheETagColIndex = mCacheInserter
						.getColumnIndex(CACHE_ETAG_COL);
				mCacheExpiresColIndex = mCacheInserter
						.getColumnIndex(CACHE_EXPIRES_COL);
				mCacheMimeTypeColIndex = mCacheInserter
						.getColumnIndex(CACHE_MIMETYPE_COL);
				mCacheEncodingColIndex = mCacheInserter
						.getColumnIndex(CACHE_ENCODING_COL);
				mCacheHttpStatusColIndex = mCacheInserter
						.getColumnIndex(CACHE_HTTP_STATUS_COL);
				mCacheLocationColIndex = mCacheInserter
						.getColumnIndex(CACHE_LOCATION_COL);
				mCacheContentLengthColIndex = mCacheInserter
						.getColumnIndex(CACHE_CONTENTLENGTH_COL);
			}
		}

		return mInstance;
	}

WebViewDatabase db = WebViewDatabase.getInstance(this);

分享到:
评论
1 楼 daylyn 2010-10-27  
就是个单利啦~~

相关推荐

    怎样使一个class不能被实例化

    ### 如何使一个类不能被实例化 在面向对象编程中,有时我们希望定义一个类作为其他类的基础,但它本身不应该被创建实例。这种类型的类通常被称为“抽象基类”或“接口”。本文将详细介绍如何在C++中实现这一目标。 ...

    C#控制同一程序只有一个实例作业

    在C#编程中,有时我们需要确保同一时间只有一个实例运行,比如设计一个守护进程或桌面快捷方式启动的应用。这种情况下,我们需要实现单例模式。本文将详细介绍如何在C#中实现控制同一程序只有一个实例运行的机制。 ...

    ATL只允许一个实例运行

    在“ATL只允许一个实例运行”的场景中,我们通常指的是实现单例模式(Singleton Pattern)来确保应用程序只有一个实例在运行。单例模式是一种设计模式,它保证了类只有一个实例,并提供一个全局访问点。 在ATL中...

    delphi 实例实例实例实例delphi 实例实例实例实例

    当你创建一个类的实例时,你会获得该类定义的属性、方法和事件的一个具体实例。在Delphi中,你可以通过关键字`new`来创建一个对象的实例。 例如,假设我们有一个名为`Person`的类,它有`Name`和`Age`两个属性。在...

    从一个小例子来看动态卸载class

    每个类都有一个对应的Class对象,它在程序运行期间始终存在,除非整个JVM退出。但是,我们可以模拟一种类“卸载”的效果,通过控制类加载器的生命周期来实现。 动态加载Class通常通过自定义类加载器实现。类加载器...

    luaclass简单例子

    通过`classheader.lua`、`Team.lua`和`TeamMgr.lua`这三份文件,我们可以看到一个从基础类模板到具体类实例,再到类管理器的层次结构,这是面向对象编程中常见的设计模式。理解并熟练掌握这种实现方式,对于在Lua...

    fastjson的一个小例子

    然后,我们来看一个简单的序列化和反序列化的例子。假设我们有一个User类: ```java public class User { private String name; private int age; // 构造函数、getter和setter省略 } ``` 要将User对象转换为...

    c# 只允许运行一个实例

    在C#编程中,有时我们需要确保我们的应用程序在操作系统上始终只有一个实例在运行。这通常用于控制资源使用,防止多个窗口的混乱,或者确保数据的一致性。这种限制应用程序实例数量的技术被称为“单例模式”。本篇...

    java100个经典例子

    `class People`定义了一个名为People的类,包含了两个成员变量`height`和`ear`,以及一个方法`speak`。在`public class A`中,创建了People类的对象`zhubajie`并设置了其属性,调用了`speak`方法。这展示了如何创建...

    构造单实例应用的例子

    单实例模式(Singleton Pattern)是设计模式中的一员,它限制类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。这种模式的主要优点在于节省系统资源,避免过多实例导致的混乱,以及在需要全局共享...

    hibernate一对一实例

    例如,一个人可能只有一个护照,而一个护照也只属于一个人。在数据库表设计中,这通常通过主键外键的方式来实现,其中一个表的主键作为另一个表的外键。 二、配置一对一关联 在Hibernate中,一对一关联可以通过以下...

    java实例化对象的过程

    单例模式确保一个类只有一个实例,并提供全局访问点。 总的来说,Java实例化对象是编程中的基本操作,它涉及到类的构造,内存分配,方法调用等多个核心概念。理解这一过程对于深入学习Java和面向对象编程至关重要。

    Java实例化一个抽象类对象的方法教程

    由于抽象类自身不能被实例化,这意味着你不能使用`new`关键字直接创建一个抽象类的对象。然而,尽管不能直接实例化,抽象类在特定情况下依然可以间接地创建对象。以下将详细介绍如何在Java中处理抽象类实例化的问题...

    单实例模式介绍及应用

    框架系统中,如提到的`DictParameter`类就是一个单实例应用的例子。类中定义了私有的构造函数,防止外部直接创建实例,通过静态方法`getInstance()`获取唯一实例。`getInstance()`使用`synchronized`关键字确保线程...

    SpringMVC 传递 和 返回对象实例 以及 zTree例子

    要返回一个对象实例,通常是在控制器方法中处理业务逻辑后,通过`Model`或`ModelAndView`来添加对象到模型中。例如: ```java @RequestMapping(value = "/getUser", method = RequestMethod.GET) public ...

    SystemVerilog中类的定义及实例.doc

    在这个例子中,类`Tr`包含一个32位逻辑变量`addr`和一个名为`print_info`的函数。`logic [31:0] addr;`声明了一个32位的二进制变量,`addr`,用于存储地址。`function void print_info;`定义了一个无返回值的函数,...

    c++工程实例代码工程 源码 例子 引用 友员 模板 继承 类与对象

    1. **引用(Reference)**:在C++中,引用不是一个新的变量,而是已存在变量的一个别名。一旦引用被初始化为某个变量,就不能改变引用到其他变量。这使得引用在传递参数和返回值时非常有用,因为它避免了复制,提高...

    hibernate Table per class hierarchy 例子代码

    下面是一个简单的例子: 假设我们有如下类结构: ```java @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class Animal { @Id @GeneratedValue(strategy = GenerationType....

    派生类实例,自己学习总结的例子

    标题“派生类实例,自己学习总结的例子”表明这是一个关于派生类的实际编程示例,作者通过实践来学习并分享理解。描述提到这是一个小型的实例,主要展示了类的派生以及基类和派生类构造函数之间的关系。这样的例子...

    简单了解JAVA中类、实例与Class对象

    加载完成后,JVM会为这个类创建一个Class对象,这个对象是类的唯一实例,在Java中这个Class对象是唯一的,并且与类的每个实例共享。 这个Class对象可以看作是类的“模板”,JVM通过这个模板来理解类的结构和行为。...

Global site tag (gtag.js) - Google Analytics