设计模式之禅学习——单例模式
1、单例模式应该是设计模式最简单的一种了,我认为,单例模式最基本的原理就是创建一个私有的构造函数,然后在该类中就生成一个该类的实例,并且通过一个静态方法返回该实例,那么当其他类应用该类时,使用的始终是一个该类的实例。
2、单例模式分为恶汉式和懒汉式。
3、恶汉式单例通用代码如下:
package com.wang.singletonPattern; /** * 恶汉式单例 * @author HeJW * */ public class Singleton1 { private static final Singleton1 singleton1 = new Singleton1(); private Singleton1(){ System.out.println("创建Singleton1实例"); } /* * 当其他类要使用该类是,通过调用该方法,得到该类的实例,并且得到的永远都是这一个 */ public static Singleton1 getSingleton1(){ return singleton1; } }
4、懒汉式单例代码如下:
package com.wang.singletonPattern; /** * 懒汉式单例 * @author HeJW * */ public class Singleton2 { private static Singleton2 singleton2 = null; private Singleton2(){ System.out.println("创建Singleton2实例"); } //如果不加synchronized关键字,线程不安全 public static synchronized Singleton2 getSingleton2(){ if( singleton2 == null ){ singleton2 = new Singleton2(); } return singleton2; } }
懒汉式单例记得要加synchronized关键字,如果不加synchronized关键字,线程不安全。如果一个A执行到
singleton2 = new Singleton2();
,但还没有获得对象(对象初始化是需要时间的),第二个线程B也在执行,执行到
singleton2 == null
判断,那么线程B得到的判断也为真,于是线程B也创建了一个实例,这样就导致两个线程创建了两个对象,所以线程不安全,只能加上synchronized关键字。
5、单例模式扩展,生成指定数量的实例,代码如下:
package com.wang.singletonPattern; import java.util.ArrayList; import java.util.Random; /** * 单例模式扩展,生成指定数量的实例 * @author HeJW * */ public class SingletonDevelop { //定义最多能生产两个实例 private static int maxNum = 2; //定义一个列表,容纳多有的实例 private static ArrayList<SingletonDevelop> singletonDeveloplist = new ArrayList<SingletonDevelop>(); //产生指定数量的实例对象 static{ for( int i=0; i<maxNum; i++ ){ singletonDeveloplist.add(new SingletonDevelop()); } } private SingletonDevelop(){ System.out.println("创建SingletonDevelop实例"); } //得到随机的SingletonDevelop实例 public static SingletonDevelop SingletonDevelop(){ Random randrom = new Random(); int singletonDevelopNum = randrom.nextInt(maxNum); return singletonDeveloplist.get(singletonDevelopNum); } }
相关推荐
编写一个类LimitInstanceClass,该类最多可以实例化指定个数实例。实例的个数用配置文件InstanceLimit.cfg指定。例如,如果InstanceLimit.cfg的内容为2,则LimitInstanceClass最多可以同时存在2个对象。...
前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一性——单例模式,...
工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...
6.1.2 单例模式(singleton) 6.1.3 建造模式(builder) 6.1.4 原型模式(prototype) 6.2 结构模式 6.2.1 适配器模式(adapter) 6.2.2 合成模式(composite模式) 6.2.3 装饰模式(decorator模式) ...
通过单例模式获取到对象后。就是只有一个对象的类 方法全部都是非static修饰的,调用方式:对象名.方法名(...); 4. 工具类命名: XxxUtil、XxxUtils、XxxTool、XxxTools 3. jar 包 (掌握)...
模拟经理每个场景中的一个单例,可以完全控制模拟及其参数。 最值得注意的功能是: 最大时标:允许模拟运行正常速度多少次的硬上限。 目标帧率:管理员将尝试将帧率保持在此数字附近。 历时长:在选择发生之前,每个...
5.1.2 单例设计模式(Singleton) 346 5.2 GUI层面向对象的扩展设计 351 5.2.1 层的概念 351 5.2.2 封装测试对象类 352 5.2.3 调用业务行为 355 5.2.4 对象识别结果分析 355 5.2.5 总结 356 6.1 框架设计理念 356 ...
XSS过滤以及单例模式 博客系统表结构讲解 博客系统功能讲解 CMDB介绍 CMDB实现的三种方式 CMDB Agent客户端示例 第26周 今日内容概要以及CMDB介绍 前端插件定制之表头 前端插件定制之表内容 第27周 前端插件定制...
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................