黑马程序员_10_单列设计模式
2014-08-02 21:40
387 查看
黑马程序员——单列设计模式
-------
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
}
}
[/code]
注意:饿汉式单例设计模式,提供的公共方法必须是静态方法。在成员位置声明本类的一个引用类型变量且指向该类对象,如果别人没使用到,会出现资源浪费问题。
懒汉式单例设计模式步骤:
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
}
}
[/code]
推荐使用:饿汉式单例设计模式,因为懒汉式存在线程安全问题。
懒汉式单例设计模式:事先不做,什么时候需要什么时候创建对象。但存在线程安全。
饿汉式单例设计模式:事先先做,先把对象给创建,但缺点是如果没人使用,浪费资源。
懒汉式单列设计模式存在着线程安全问题,那该如何解决呢?
我们可以采用同步代码块进行双重判断解决该类问题。
这种方法又叫延时加载单例设计模式:
代码如下:
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;
}
}
[/code]
采用双重判断,大大提高了效率。不采用同步函数,是因为每次进来都需要判断锁,效率低。
-------
android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员--Java学习日记之总结复习(多线程和设计模式)
- 黑马程序员——JDK1.5新特性、单例设计模式
- .NET设计模式(10):装饰模式(Decorator Pattern)
- 设计模式笔记(10 MEDIATOR & MEMENTO)
- 程序员的偷懒 -- 设计模式之抽象工厂
- 设计模式学习总结10 - 行为型5 - State状态模式
- 设计模式学习10 -- 命令模式
- 设计模式10:Flyweight Pattern (友元模式)
- 设计模式(10)-组合模式(Composite)
- C#设计模式(10)-Adapter Pattern
- C#设计模式(10)-Adapter Pattern
- Java设计模式(10) —— 状态
- 设计模式笔记(10 MEDIATOR & MEMENTO)
- 怎样才算是一个成熟的程序员:从设计模式谈起
- C#设计模式(10)-Adapter Pattern
- C#设计模式(10)-Adapter Pattern
- .NET设计模式(10):装饰模式(Decorator Pattern)
- C#设计模式(10)-Adapter Pattern
- C#设计模式(10)-Adapter Pattern
- .NET设计模式(10):装饰模式(Decorator Pattern)