2016.11.10
单列设计模式
java中总共有23种设计模式,其中,单列式设计模式是最常见的一种,单列式又主要分为三种:懒汉式单例、饿汉式单例、登记式单例。我们主要讲其中两种。
所谓的模式:就是解决一系列问题的应用
饿汉单例设计模式
1. 私有化构造函数。
2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
3. 提供一个公共静态的方法获取本类的对象。
懒汉单例设计模式:
1. 私有化构造函数。
2. 声明本类的引用类型变量,但是不要创建对象,
3. 提供公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类对象,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,然后再返回。
// 饿汉式 class Single{ //声明本类的引用类型变量,并且使用该变量指向本类对象 private static Single s = new Single(); //私有化构造函数 private Single(){} //提供一个公共静态的方法获取本类的对象 public static Single getInstance(){ return s; } }
//懒汉式 class Single2{ //声明本类的引用类型变量,不创建本类的对象 private static Single2 s; //私有化了构造函数 private Single2(){} public static Single2 getInstance(){ if(s==null){ s = new Single2(); } return s; } }
public class Demo5 { public static void main(String[] args) { Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); System.out.println("是同一个对象吗?"+(s1==s2)); } }
推荐使用: 饿汉单例设计模式。 因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。
什么是线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
相关推荐
设计模式 java 单例模式
设计模式全部内容(抽象模式·工厂模式·代理模式·单列模式·)
设计模式--单例模式java例子
Qt单例设计模式(1-8)
java设计模式 设计模式(列如:单列,工厂,桥梁,===)
单例模式23中设计模式之一
废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧。 php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式。之所以我在这里...
设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助
多线程简单工厂设计模式,工厂方法模式,单列模式,多线程死锁解决
iOS 设计模式,文字通过代码与例子,清晰的讲解了设计模式:工厂模式、单列、接口适配、桥接、中介者、观察者、抽象集合、迭代器、行为扩展、算法封装、责任链、装饰、访问者、模板方法、命令、性能与对象访问、代理...
单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源 单例模式无论是在实际开发中还是在软件应用中比较常见,...
设计模式 设计模式一些代码演示摘要:1.工厂模式(简单工厂+工厂模式+抽象工厂)2.策略模式3.单列模式4.模板模式(模板方法)
Java设计模式-单例模式详解,包含三种模式式:饿汉,懒汉,登记式,以及线程多同步的处理
什么是设计模式? 就是一个房间里放东西,很乱,很难找到你想要的东西,但是做一些箱子放里面,方便你去放东西与寻找, 我们吧做箱子包放入房间的行为叫做设计模式。 单列模式 解决痛点 : 同一个构造函数,生成同一个...
Java设计模式的类别有哪些? 基于问题分析,可以将设计模式分为以下几类: 创造模式 工厂方法/模板模式 抽象工厂模式 建造者模式 原型模式 单列模式 结构模式 适配器模式 桥模式 筛选模式 合成模式 装饰者模式 正面...
毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。单例模式 当需要保证某个对象只能有一个实例的时候,单例模式非常有用。它把...
设计模式 单列模式 懒汉模式 class LazySingletonInstance { private static volatile LazySingletonInstance lazyInstance; private LazySingletonInstance () { System . out . println( " test " ); } ...
算不上写教程,只是自己学习Cairngorm之后,通过制作一个简单的例子之后的一点心得分享。适合对AS3精通,对Flex熟悉,对Cairngorm...所以学习之前,还得苦下功夫去了解一些常用的设计模式,如单列模式,命令模式等等。