设计模式--单例

单例设计模式用来创建唯一的对象,有些时候我们只需要一个对象,如:线程池,缓存,对话框,注册表,日志对象,等等。这就需要单例设计模式来完成。
不用多说,直接上代码。
public
class TestSingle {
private static TestSingle single = null;
private
TestSingle(){}
public static TestSingle
getInstance(){
if(single==null){
single = new
TestSingle();
}
return
single;
}
}
单例大家都知道,然而本文所讨论的单例重点为多线程下的单例模式
public class Test
{
public static void main(String[] args) {
Thread t1 = new Thread(new
Runnable() {
public void run() {
TestSingle t =
TestSingle.getInstance();
System.out.println(t);
}
});
Thread
t2 = new Thread(new Runnable() {
public void run() {
TestSingle t =
TestSingle.getInstance();
System.out.println(t);
}
});

Thread
t3 = new Thread(new Runnable() {
public void run() {
TestSingle t =
TestSingle.getInstance();
System.out.println(t);
}
});
t1.start();
t2.start();
t3.start();
TestSingle
t11 = TestSingle.getInstance();
TestSingle t22 =
TestSingle.getInstance();
TestSingle t33 =
TestSingle.getInstance();
System.out.println("123"+t11);
System.out.println("123"+t22);
System.out.println("123"+t33);
}
}
通过测试发现,上面的单例类所打印出的hashcode码是不同的。也就是说在多线程状态下,我们的单例不起作用了。
解决办法:
1.在TestSingle
getInstance()方法修改为public static synchronized TestSingle getInstance()
这样多线程就可以同步了。
2。采用急切实例化。即private static TestSingle single =
null;在声明时直接实例化该对象。
两种方法各有优缺点。第一种方法,在性能上或有下降。因为synchronized会影响性能。第二种方法,在jvm加载这个类的时候就创建改实例。
如果我们用不到改实例,为浪费。总之各有优缺点。

单例模式:
单件模式确保程序中一个类最多只有一个实例。
单件模式也提供访问这个实例的全局点。
在Java中实现单件模式需要私有的构造器,一个静态方法和一个静态变量。
确定在性能和资源上的限制,容纳后小心的选择适合的方案解决单件,以解决多线程的问题。
小心,你如果使用多个类加载器,可能导致单例的失效而产生多个实例。

设计模式--单例,布布扣,bubuko.com

时间: 2024-10-26 08:31:22

设计模式--单例的相关文章

Javascript 设计模式 单例

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单例模式的写法 单例模式写法相当简单: var singleTon = { m1: "memeber first ", m2: "memeber second ", f1: function () { console.log("fun1 "); } }

Java软件设计模式------单例设计模式

Java软件设计模式一共分为23种; 一般常用的有: 单例设计模式 装饰设计模式 工厂设计模式 单例设计模式(以后的用处:spring框架IOC,默认创建的对象都是单例的): 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 单例设计模式分为两种(饿汉式和懒汉式): ①饿汉式(常用): 特

Android与设计模式——单例(Singleton)模式

概念: java中单例模式是一种常见的设计模式.单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类仅仅能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给全部其它对象提供这一实例. 单例模式确保某个类仅仅有一个实例.并且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机能够有若干个打印机,但仅仅能有一个Pri

Objective-C设计模式——单例Singleton(对象创建)

单例 和其它语言的单例产不多,可以说是最简单的一种设计模式了.但是有几个点需要注意下,单例就是一个类只有一个实例. 所以我们要想办法阻止该类产生别的实例,一般语言中都会将构造函数写为private.但是OC中的函数并没有限定符,所以我们需要用一些小技巧来屏蔽这一点. 应用场景 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法. 这个唯一的实例只能通过类的子类化进行扩展,而且扩展的对象不会破坏客户端代码. 注意 1.OC中单例的实例变量要定义在.m文件 2.OC中单例需要

java设计模式--单例设计模式

java中共有21种设计模式,其中面试中常问的是单例设计模式: 单例设计模式有两种常用的方式:1.懒汉式:1)先私有化构造函数,让此类不能被实例化:(private 类名(){}):2)在类中自己实例化一个空的对象:(private static 类名  对象名=null;):3)构造一个方法,返回本类的对象:在中间增加一个判断语句,如果进来的对象是个空值,就new一个实例化,否则直接返回此对象: 例如: /** * 懒汉式 * @author chenjun *2017-5-2上午9:16:0

java软件设计模式——单例设计模式中的【饿汉式】与 【懒汉式】示例

以下为单例设计模式中的两种经典模式的代码示意: 1 单例设计模式(spring框架IOC,默认创建的对象都是单例的): 2 饿汉式: 3 public class SingleClass { 4 private SingleClass(){} //私有化构造方法 不能new对象 5 private static final SingleClass s=new SingleClass(); 6 //返回本类对象 7 public static SingleClass getInstance(){

java设计模式--单例

GOF23(group of four)---由4个大牛总结的JAVA23种常用的设计模式,归根结底都是为了代码的可扩展性. 设计模式中一种比较重要的思想就是:开闭原则,尽量做到对扩展开放,对修改关闭. 单例模式:开发中最常见也是最简单的一种模式 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例. 1.懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己,优点:延时加载,用到时候

Java设计模式—单例设计模式(Singleton Pattern)全然解析

转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用的最多的设计模式,可能有非常多人会写几种设计模式.那么你是否知道什么是设计模式?为什么会有单例设计模式即它的作用是什么?单例模式有哪些写法?对于这种问题.可能有部分童鞋并不能非常好的回答,没关系今天就和大家一起来具体的学习下单例设计模式,相信通过学习本篇你将对单例设计模式有个具体的理解. 如有谬误欢

iOS常用设计模式——单例设计模式

单例设计模式详解 单例设计模式详解 基本概念 在IOS中使用单例模式的情况 非ARC环境创建单例模式的基本步骤 非ARC环境具体代码实现 ARC环境创建单例模式的基本步骤 基本概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问 在IOS中使用单例模式的情况 1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间 2.在IOS开发中,如果很多模