单例模式:

  饿汉式单例

//饿汉式单例类.在类初始化时,已经自行实例化
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. CSU 1785: 又一道简单题

    1785: 又一道简单题 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 602   ...

  2. 分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

    1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景 ...

  3. 洛谷——P1098 字符串的展开

    P1098 字符串的展开 题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输 ...

  4. Unix/Linux提权漏洞快速检测工具unix-privesc-check

    Unix/Linux提权漏洞快速检测工具unix-privesc-check   unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具.它是一个Shell文件,可以检测 ...

  5. POJ 3373 Changing Digits 记忆化搜索

    这道题我是看了别人的题解才做出来的.题意和题解分析见原文http://blog.csdn.net/lyy289065406/article/details/6698787 这里写一下自己对题目的理解. ...

  6. centos7下使用wget命令安装mysql

    1.首先安装wget命令: yum -y install  wget 2.下载mysql wget http://repo.mysql.com/mysql-community-release-el7- ...

  7. centos7.3 开放端口 防火墙端口

    1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=666/tcp 若此提示 FirewallD is not ...

  8. 代码统计利器--CLOC

    MAC下安装命令:$ brew install cloc 其他的linux安装 $ aptitude install cloc 使用方法.到目录下运行: $ cloc . The default ou ...

  9. andriod 支付宝类似界面图片加文字

    <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="ht ...

  10. 关于Sending build context to Docker daemon 数据很大的问题

    以往进行docker build的时候都是在新建的文件夹下面进行,这次为了图方便,就直接放在开发根目录下进行build,这样子问题就来了.于是就有了下面的文件大小发送量: Sending build ...