黑马程序员_10_单列设计模式
来源:互联网 发布:普通话翻译客家话软件 编辑:程序博客网 时间:2024/06/04 22:47
黑马程序员——单列设计模式
------- android培训、java培训、期待与您交流! ----------
设计模式:顾名思义就是解决一类问题的固定步骤,如建房必须打地基---起柱子---砌墙---封顶---装修。
单列设计模式:定义是必须保证一个类在内存中只有一个对象。
从应用场景来看又分为:饿汉式单例设计模式,懒汉式单例设计模式。
饿汉式单列设计模式步骤:
1、私有化构造函数,这样别人就不能通过new关键随意创建对象了。
2、但是必须保证一个类在内存中有一个对象,所以在本类中创建一个本类的对象,且声明一个变量指向。
3、提供一个公共的静态的方法获取本类的对象。
class Single{
//2声明本类的一个引用类型变量并且指向该类对象。
private static Single s = new Single();
//1私有化构造函数。
private Single(){}
//3提供一个公共的静态方法获取本类的对象。
public static Single getInstance()
{
return s;//返回一个对象
}
}
class Instance
{
public static void main(String[] args){
//获取本类的一个对象。
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.println(s1==s2);//输出结果是ture
}
}
注意:饿汉式单例设计模式,提供的公共方法必须是静态方法。在成员位置声明本类的一个引用类型变量且指向该类对象,如果别人没使用到,会出现资源浪费问题。
懒汉式单例设计模式步骤:
1、私有化构造函数。
2、声明本类的引用类型变量,但不创建本类的对象。
3、提供一个公共静态的方法创建本类的对象并且返回,在创建之前必须要先判断是否已经创建了该类的对象, 如果已经创建了那么直接返回即可,如果没有创建那么先创建再返回。
代码如下:
//懒汉式
class Single2{
//声明本类的引用类型变量,但是不创建本类的对象。
private static Single2 s;
//私有化了构造函数
private Single2(){}
//提供一个公共静态的方法创建本类的对象并且返回。
public static Single2 getInstance(){
if(s==null){//判断s是否已经创建
s = new Single2();
}
return s;
}
}
class Test
{
public static void main(String[] args)
{
//获取到了本类的一个对象。
Single2 s1 = Single2.getInstance();
Single2 s2 = Single2.getInstance();
System.out.println("是同一个对象吗?"+ (s1==s2));//输出结果是ture
}
}
推荐使用:饿汉式单例设计模式,因为懒汉式存在线程安全问题。
懒汉式单例设计模式:事先不做,什么时候需要什么时候创建对象。但存在线程安全。
饿汉式单例设计模式:事先先做,先把对象给创建,但缺点是如果没人使用,浪费资源。
懒汉式单列设计模式存在着线程安全问题,那该如何解决呢?
我们可以采用同步代码块进行双重判断解决该类问题。
这种方法又叫延时加载单例设计模式:
代码如下:
package itheima;
//懒汉式
class Single{
//声明本类的引用类型变量,但是不创建本类的对象。
private static Single s;
//私有化了构造函数
private Single(){}
//提供一个公共静态的方法创建本类的对象并且返回。
public static Single getInstance(){
//采用双重判断,这样只有第一次需要判断锁,
if(s==null){
//锁采用本类字节码文件,保证锁的唯一
synchronized (Single.class) {
if(s==null){//判断s是否已经创建
s = new Single();
}
}
}
return s;
}
}
采用双重判断,大大提高了效率。不采用同步函数,是因为每次进来都需要判断锁,效率低。
------- android培训、java培训、期待与您交流! ----------
0 0
- 黑马程序员_10_单列设计模式
- 黑马程序员---单列设计模式
- 黑马程序员 单列设计模式
- 黑马程序员--java单列设计模式
- 黑马程序员_Java基础[11]_单列设计模式
- 黑马程序员——JAVA基础之单列设计模式
- 黑马程序员_10_高新技术之反射
- 设计模式--单列模式
- 设计模式-单列模式
- 单列模式设计
- 设计模式之单列
- 单列设计模式
- android 设计模式:单列
- java单列设计模式
- 单列设计模式
- php单列设计模式
- 单列设计模式
- 温习设计模式单列
- TCP带外数据测试
- 2014-08-02 日志
- 对于 MVVM 我想说:自已的事情自已做,控制器就简化了!
- HDU 1829 A Bug's Life (并査集)
- LeetCode OJ --问题与解答 Word BreakII
- 黑马程序员_10_单列设计模式
- ubuntu 12.04保存屏幕亮度解决方法
- Maven—SSH项目搭建
- poj 3663 Costume Party 【简单搜索】
- JUNIT 入门 笔记
- CUGBACM_组队赛1
- ANSI ASCII UNICODE
- windows下配置Nginx+memcached+tomcat实现负载均衡以及动静资源分离
- ios 给textField每四位添加一个空格