版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u012515223/article/details/28595349

单件模式(singleton pattern) 具体解释

本文地址: http://blog.csdn.net/caroline_wendy/article/details/28595349

单件模式(singleton pattern) : 确保一个类仅仅有一个实例, 并提供一个全局訪问点.

单位价格模式包含3个部分: 私有构造器, 静态变量, 静态方法.

具体方法:

1. 标准的单例模式:

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance; //静态变量 private Singleton() {} //私有构造函数 public static Singleton getInstance() { //静态方法
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
} }

2. 考虑多线程的三种方法:

同步(synchronized)方法, 加入"synchronized",  会导致性能下降, 每次调用演示样例, 都须要同步, 可是使用简单.

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance; //静态变量 private Singleton() {} //私有构造函数 public static synchronized Singleton getInstance() { //静态方法
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
} }

急切(eagerly)方法, 開始时创建实例, 会在不须要时, 占用实例空间, 即占用空间时间过长.

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance = new Singleton(); //静态变量 private Singleton() {} //私有构造函数 public static synchronized Singleton getInstance() { //静态方法
//if (uniqueInstance == null)
//uniqueInstance = new Singleton();
return uniqueInstance;
} }

双重检查加锁(double-checked locking)方法, 使用"volatile"和"synchronized (Singleton.class)", 降低时间消耗, 适用于java1.4以上版本号.

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class Singleton {
private volatile static Singleton uniqueInstance; //静态变量 private Singleton() {} //私有构造函数 public static synchronized Singleton getInstance() { //静态方法
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
}
}
return uniqueInstance;
} }

3. 使用单件模式的样例:

代码:

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class ChocolateBoiler { //巧克力锅炉
private boolean empty;
private boolean boiled; public static ChocolateBoiler uniqueInstance; //静态变量 private ChocolateBoiler() { //私有构造函数
empty = true;
boiled = false;
} public static ChocolateBoiler getInstance() { //静态方法
if (uniqueInstance == null)
uniqueInstance = new ChocolateBoiler();
return uniqueInstance;
} public void fill() { //填满
if (isEmpty()) {
empty = false;
boiled = false;
}
} public void drain() { //倾倒
if (!isEmpty() && isBoiled())
empty = true;
} public void boil() { //煮
if (!isEmpty() && !isBoiled()) {
boiled = true;
}
} public boolean isEmpty() {
return empty;
} public boolean isBoiled() {
return boiled;
} }

4. 枚举单件(enum singleton)模式, 也能够保证线程安全.

代码:

/**
* @time 2014.6.5
*/
package singleton; /**
* @author C.L.Wang
*
*/
public class EnumSingleton { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub eSingleton d1 = eSingleton.INSTANCE;
d1.setName("Spike"); eSingleton d2 = eSingleton.INSTANCE;
d2.setName("Caroline"); System.out.println(d1);
System.out.println(d2); System.out.println(d1 == d2);
} } enum eSingleton { INSTANCE; private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "[" + name + "]";
}
}

输出:

[Caroline]
[Caroline]
true

设计模式 - 单件模式(singleton pattern) 具体解释的更多相关文章

  1. C#设计模式——单件模式(Singleton Pattern)

    一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...

  2. 设计模式 - 策略模式(Strategy Pattern) 具体解释

    策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...

  3. 设计模式 - 命令模式(command pattern) 具体解释

    命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...

  4. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  5. 设计模式 - 工厂模式(factory pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...

  6. 设计模式----创建型型模式之单件模式(Singleton pattern)

    单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...

  7. 说说设计模式~单件模式(Singleton)

    单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...

  8. 1.单件模式(Singleton Pattern)

    意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.简单实现(多线程有可能产生多个实例) public class CommonSigleton { /// <summary& ...

  9. 设计模式 - 装饰者模式(Decorator Pattern) 具体解释

    装饰者模式(Decorator Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者 ...

随机推荐

  1. hdu1003(C++)解法1

    #include<iostream>using namespace std;int Maxsum(int*a, int n);int main(){ int T,n,i,j,count=0 ...

  2. windows8开发-关于wp7应用迁移到win8 metro风格

    虽然微软说,wp7应用移植到win8上面是比较简单,只需要修改部分API和设计原则上的细节,同时它也提供了一份比较简洁的参考文档: 而实际上这种移植的工作量还是不小的,尤其当应用引用了较多底层的API ...

  3. Project Euler:Problem 89 Roman numerals

    For a number written in Roman numerals to be considered valid there are basic rules which must be fo ...

  4. 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)

    ),请不要反复加群! 欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! 该DrawerLayoutAndroid组件封 ...

  5. 【Python】读取cvs文件报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 6: invalid start byte

    现在有文件data.csv 文件编码格式为:ANSI data.csv 1|1|1|北京市 2|1|2|天津市 3|1|3|上海市 4|1|4|重庆市 5|1|5|石家庄市 6|2|5|唐山市 7|3 ...

  6. Hbase Basic

    启动:start-hbase.sh 停止:stop-hbase.sh 进入shell:hbase shell 状态:status 创建表:create 'tableName', 'colFam1' 查 ...

  7. SQLSERVER 2008 链接 到 ORACLE 11

    MSSQL2008R2 链接 ORACLE 11: 创建链接: exec sp_addlinkedserver 'DBLINK_ORACL' , 'ORACLE' , 'MSDAORA' , 'ORC ...

  8. 在SAE安装原版WORDPRESS(图文讲解)

    wordpress下载:https://cn.wordpress.org/ 在Sina App Engine上搭建WordPress博客图文教程: 一.登录你的SAE账号以后.进入"我的应用 ...

  9. C语言 结构体篇

    结构体:是一种构造类型 它是由若干成员组成的 其中每一个成员都可以是一个基本数据类型或者又是一个构造类型 定义结构体变量后,系统就会为其自动分配内存 为了便于更大的程序便于修改和使用  常常将结构体类 ...

  10. Ubuntu Server 安装 NodeJS

    准备命令: $ sudo apt-get install python $ sudo apt-get install build-essential $ sudo apt-get install gc ...