目录
设计模式的定义
单例设计模式(Singleton)
实现方式分成:饿汉式 VS 懒汉式
饿汉式跟懒汉式的区别
单例模式的应用场景
设计模式的定义
在大量的时间中总结和理论化之后优选的代码结构、编程风格、解决问题的思考方式。就像是经典的棋谱。不同的棋局,使用不同的棋谱、套路。
单例设计模式(Singleton)
采取一定的方法保证在整个系统中,对某个类只能存在一个实例对象,并且该类只提供一个取得其对象实例的方法。
具体的步骤:
- 类的构造器访问权限设置成private。这样在类的外部无法产生类的对象,只能在类内部产生类对象。
- 类的某个静态方法以返回类内部创建的对象。
- 静态方法只能访问类中静态成员变量,所以指向类内部产生的该类对象变量也必须定义成静态的。
实现方式分成:饿汉式 VS 懒汉式
public class Singleton{
public static void main(String[] args){
Bank bank1 = Bank.getInstance();
Bank bank2 = Bank.getInstance();
//bank1和bank2是同一个对象
System.out.println(bank1 == bank2);
Order order1 = Order.getInstance();
Order order2 = Order.getInstance();
//order1和order2是同一个对象
System.out.println(order1 == order2);
}
}
//饿汉式-直接造对象
class Bank {
//1.私有化构造器
private Bank(){
}
//2.内部创建对象
//4.要求此对象也必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的方法返回类的对象
public static Bank getInstance(){
return instance;
}
}
//懒汉式-调方法的时候再创建对象
class Order{
//1.私有化构造器
private Order(){
}
//2.先声明当前类对象,没有初始化
//4.此对象也必须声明为static的
private static Order instance=null;
//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){
if(instance == null){
instance = new Order();
}
return instance;
}
}
饿汉式跟懒汉式的区别
饿汉式:
好处:线程安全
坏处:对象加载时间过长。
懒汉式:
好处:延迟对象的创建
坏处:目前的写法,线程不安全。后续优化。
单例模式的应用场景
由于单例模式只生成一个实例,减少系统性能开销。
当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久的驻留在内存的方式来解决。
举例:java.lang.Runtime
- 网站的计数器。统计pv、uv等数据。
- 应用程序的日志应用。由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
- 数据库连接池。连接池只用造一个,数据库连接是一种数据库资源。
- 读取配置文件的类。一般也只有一个对象,没必要每次读取数据都生成一个对象。
- Application应用程序。
- Windows的Task Manager 任务管理器
- Windows的Recycle Bin 回收站



