单例设计模式
1、单例设计模式:保证类在内存中只有一个对象。
- 如何保证类在内存中只有一个对象呢?
- (1)控制类的创建,不让其他类来创建本类的对象。private
- (2)在本类中定义一个本类的对象。Singleton s;
- (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
2、示例代码如下:
package com.jh.www;
public class Test1 {
/*
*单例设计模式:保证类在内存中只有一个对象。
* 如何保证类在内存中只有一个对象呢?
* (1)控制类的创建,不让其他类来创建本类的对象。private
* (2)在本类中定义一个本类的对象。Singleton s;
* (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
**/
public static void main(String[] args) {
Sign s = Sign.getS();
Sign s1 = Sign.getS();
System.out.println(s==s1);
Sign1 s2 = Sign1.getS();
Sign1 s3 = Sign1.getS();
System.out.println(s2==s3);
Sign2 s4 = Sign2.s;
Sign2 s5 = Sign2.s;
System.out.println(s4==s5);
}
}
/*
* 饿汉式:以空间换取时间;
*
* **/
class Sign{
//1、把构造方法进行私有;
private Sign() {
}
//2、在本类中创建对象;
private static Sign s = new Sign();
//3、提供公共的访问方式;
public static Sign getS() {
return s;
}
}
/*
* 懒汉式:以时间换取空间;
* 单例延迟加载模式;
* **/
class Sign1{
//1、把构造方法进行私有;
private Sign1() {
}
//2、在本类中创建对象;
private static Sign1 s ;
//3、提供公共的访问方式;
public static Sign1 getS() {
if(s == null) {
//线程1等待,线程2等待;
s = new Sign1();
}
return s;
}
}
//第三种;
class Sign2{
//1、把构造方法进行私有;
private Sign2() {
}
//2、在本类中创建对象;
public final static Sign2 s = new Sign2();
}