单例模式:
概念:
就是采取一定的方法保证整个系统软件中,对某个类只能存在一个对象实例,并且该类只提供一个取得对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍能产生类的对象。因为在类的外部开始无法得到类的对象,只能调用该类的某个静态方法已返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对像的变量也必须定义成静态。
饿汉式单例模式
代码
/**
* 单例模式的设计
* @author Administrator
*
*/
public class Danli {
public static void main(String[] args) {
//这样就满足了单例模式一个类只能有一个对象
Bank bank1=Bank.fun();
Bank bank2=Bank.fun();
System.out.println(bank1==bank2);
}
}
/**
* 饿汉式单例模式
* @author Administrator
*
*/
class Bank{
//创建一个私有的类的构造方法
private Bank() {
}
//在类的内部创建对象
private static Bank bank=new Bank();
//创建一个公共的静态方法,能让外部调用
public static Bank fun() {
return bank;
}
}
懒汉式单例模式
代码
/**
* 懒汉式单例模式
* @author Administrator
*
*/
public class Danli1 {
public static void main(String[] args) {
Lanhan lanhan1=Lanhan.fun();
Lanhan lanhan2=Lanhan.fun();
System.out.println(lanhan1==lanhan2);
}
}
/**
* 懒汉式单例模式
* @author Administrator
*
*/
class Lanhan{
//创建类的私有构造器
private Lanhan() {
}
//在类的内部创建类的对象引用
private static Lanhan lanhan=null;
//创建公共的静态方法返回类的对象
//用的时候才创建
public static Lanhan fun() {
if(lanhan==null) {
lanhan=new Lanhan();
}
return lanhan;
}
}
饿汉式 VS 懒汉式(特点)
1 .饿汉式单例模式:
缺点:对象加载时间过长
有点:线程是安全的
2. 懒汉式单例模式:
目前线程是不安全的,后期需要优化(到线程的时候在改进)
单例模式的应用
创建型模式: 5种
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式: 7种
适配器模式 装饰器模式 代理模式外观模式 桥接模式 组合模式 享元模式
行为型模式: 11种
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式