08-单例模式初步
单例模式初步
这里只是简单实现一下单例模式,不作深入讨论
1、单例模式介绍
package h单例模式初步;
public class User {
private String name="jakhd";
int age=10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*
* 单例模式是23种设计模式中最简单的模式
* 主要作用:
* 为了保证JVM中某一个类型的java对象永远只有一个。
* 为了节省内存开销
*/
package h单例模式初步;
public class UserTest {
public static void main(String[] args){
User u1 = new User();
User u2 = new User();
//如果==两边都是基本数据类型,则比较这两个基本数据的大小
//如果==两边都是引用数据类型,则比较的是内存地址是否相同
System.out.println(u1==u2);//false
//u1.setName("dshkasjh");
System.out.println(u1.getName());
System.out.print(u1.age);
}
}
2、实现单例模式
单例模式有懒汉式和饿汉式两种,前者是在需要对象时才会创建单例对象,节省空间,效率不如后者;后者是在类加载阶段就创建单例对象,如果不用会占内存,但效率高。
/*
* 实现单例模式
*
* 要领:
* 1.首先构造方法私有化private
* 2.对外提供一个公开且静态的获取当前类型(返回值为当前类)对象的方法
* 3.最后提供一个当前类型的静态变量
*
* 单例模式分两种:
* 饿汉式单例:在类加载阶段就创建了对象,就是说在提供的静态变量上赋值时new一个对象给静态变量,因为静态变量在类加载阶段赋值
* 懒汉式单例:用到对象的时候才创建对象,即在定义静态变量的时候给其赋一个null,用到的时候判断静态变量是否为空,为null则new
* 一个对象,并将内存地址赋给静态变量;不为null则直接返回静态变量
*/
//懒汉式单例
package h单例模式初步;
public class Singleton {
//静态变量
private static Singleton s = null;
private Singleton(){
}
//对外提供一个公开的获取Singleton类型对象的方法
public static Singleton get(){
if (s==null){
s=new Singleton();
}
return s;
}
}
package h单例模式初步;
public class SingleTest01 {
public static void main(String[] args){
Singleton u1 = Singleton.get();//当要调用方法到不是本类中,类名. 不能省
Singleton u2 = Singleton.get();//Singleton.set=s = new Singleton()
System.out.println(u1==u2);
}
}