单例模式:

  饿汉式单例

//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造子
private Singleton1() {}
//已经自行实例化
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}

  懒汉式单例

//懒汉式单例类.在第一次调用的时候实例化
public class Singleton2 {
//私有的默认构造子
private Singleton2() {}
//注意,这里没有final
private static Singleton2 single=null;
//静态工厂方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}

Mongo对象创建的一个简单单例:

  在单例类中可以使它的属性也成为单例例如本例子中的 wMongodb 在私有的构造函数中初始化该属性即可实现 属性单例化

 public class MongoDB {

     private Mongo wMongodb;

     private static MongoDB instance = null;

     private static synchronized MongoDB GetInstance()
{
if(!isInstanceAlive())
{
instance = new MongoDB();
}
return instance;
} /**
* 判断数据库是否处于连接状态中
* @return true:连接中<br/>
* false:已断开
*/
private static boolean isInstanceAlive() {
boolean retBool = false;
try {
// 尝试访问一次数据库
DBCollection col = instance.wMongodb.getDB("olacloud").getCollection("noexist");
col.find().count();
retBool = true;
} catch (Exception e) {
try {
instance.wMongodb.close();
} catch (Exception ex) {}
}
return retBool;
} private MongoDB()
{
try {
MongoClientOptions.Builder voicedbBuilder = MongoClientOptions.builder();
voicedbBuilder.connectTimeout(3000);
voicedbBuilder.socketTimeout(6000);
voicedbBuilder.autoConnectRetry(true);
voicedbBuilder.connectionsPerHost(5);
voicedbBuilder.readPreference(ReadPreference.secondaryPreferred());
voicedbBuilder.socketKeepAlive(true);
MongoClientOptions voicedbOptions = voicedbBuilder.build(); // wMongodb = new MongoClient(new ServerAddress("172.16.10.15", 27020),voicedbOptions);
wMongodb = new MongoClient(new ServerAddress("wmongo.olavoice.com", 27020),voicedbOptions); DB db = wMongodb.getDB("olacloud");
// DB db = wMongodb.getDB("olacloud_internal");
db.authenticate("olacloud", "olacloud".toCharArray());
db.setWriteConcern(WriteConcern.SAFE);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* 获取数据库连接
* @return 已经连接的数据库
*/
public static DB getDB() {
DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud");
// DB db = MongoDB.GetInstance().wMongodb.getDB("olacloud_internal");
return db;
} /**
* 获取table的连接
* @param tableName table名
* @return table连接
*/
public static DBCollection getDBCollection(String tableName) {
DB db = MongoDB.getDB();
DBCollection col = db.getCollection(tableName);
return col;
} /**
* 关闭当前的Mongodb连接
*/
public static void close() {
if (instance != null) {
instance.wMongodb.close();
}
}
}

单例模式(Mongo对象的创建)的更多相关文章

  1. 从简单示例看对象的创建过程, 为什么双重检查的单例模式,分析Volatile关键字不能少

    编译指令 :javac Test.java 反编译指令: javap -v Test 代码 public class ObjectTest { int m = 8; public static voi ...

  2. 类和对象的创建过程(元类,__new__,__init__,__call__)

    一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...

  3. 关于 EF 对象的创建问题

    在开发过程中,项目往往被划分为多层,而一个请求过来往往是从表示层开始一层一层向下调用,那么如果我们在不同的层中都使用到了 EF 上下文对象,而 有好几层都这么创建一个 EF 对象然后对其进行操作,那么 ...

  4. 单例模式(Singleton)---创建型

    1 单例模式的使用场景 (1)当创建一个对象所占用的资源很多,但同时又需要使用到该对象 (2)当堆系统内的资源要求统一读写时,比如读写的配置信息,此时必须要求创建的实例信息相同 (3)当有多个实例可能 ...

  5. 图解JAVA对象的创建过程

    前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...

  6. JVM中对象的创建过程

    JVM中对象的创建过程如以下流程图中所示: 对其主要步骤进行详细阐述: 为新生对象分配内存: 内存的分配方式: 指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边, ...

  7. 《JavaScript高级程序设计》读书笔记--(4)对象的创建

    ECMAScript支持面向对象(OO)编程,但不使用类或者接口.对象可以在代码执行过程中创建或增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以采用下列模式创建对象. 对象的创建 工厂模 ...

  8. java 对象 :创建

    灵感来自effective java 关于对象,是java的核心,如何有效的创建其实是一个值得关注的地方. 1.静态工厂:这是一个值得关注的,并且应该时刻考虑的方法. 优点:1.他是有名字的,这个是如 ...

  9. 深入理解Java虚拟机(二)、Java对象的创建,内存布局和访问定位

    对象的创建: Object obj = new Object(); 常量池中是否有Ljava.lang.Object

随机推荐

  1. bytearray和file的后端上传方式

    public static String readAndUpload(String serverpath,String imgid) { if(serverpath==null){ serverpat ...

  2. js上传Excel文件

    一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...

  3. Topcoder SRM 666 DIV 1

    WalkOverATree 题意:给你一棵树,有个人在节点0,现在问你,这个人走L步,最多能访问多少个不同的节点,一个节点可以被走多次,但只算一次. 题解:这个问题的关键在于,每个点最多走两次,这是因 ...

  4. eclipse 国际化 $NON-NLS-1$ 含义

    一.$NON-NLS-1$ 含义 Eclipse 如果每行代码里有这个字符串:$NON-NLS-1$ 表示:这一行的第一个字符串是不需要国际化的.同理$NON-NLS-2$,$NON-NLS-3$.. ...

  5. 模拟登陆web微信的流程和参数细节

    这几天在用python写了一个模拟登陆web微信,发送和接受信息的程序.发现步骤不多,但需要的参数太多了 整个过程中,务必保证session.headers.cookie一致,不然的话,中间会出现登陆 ...

  6. Windows脚本\批处理命令学习笔记

    1.为新建变量赋值: set 变量=值 2.输出变量的值 echo %变量% 3.关闭批处理中命令行的显示(默认是显示命令行的) 在文件開始处增加:echo off 若需又一次显示:echo on 若 ...

  7. hibernate向mysql插入数据后,得到该条数据主键的方法

    hibernate向MySQL插入一条数据后,得到该条数据主键的方法.主键是自增长的. 保存完成后,直接用该实体的getId的方法就可以得到.因为保存完成后,hibernate会自动将id赋值给实体. ...

  8. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  9. Unity3D开发基础组件提取总结

    在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块.这些模块,对大部分手机网络游戏来说都是一样的.所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来.让后面其它游戏的开 ...

  10. JQuery EasyUI DataGrid动态合并单元格

    /**        * EasyUI DataGrid根据字段动态合并单元格        * @param fldList 要合并table的id        * @param fldList ...