设计模式——单例模式
2020-12-08 20:31
435 查看
单例模式:一个类只能有一个实例(只能创建出一个对象),为了节省内存资源
怎么保证只有一个实例?
我们知道,当创建一个新对象时,我们会调用类的构造方法,创建多个对象,那我们就会调用多次构造方法,现在我们要保证只有一个实例,也就是说我们不管创建多少个对象,都只调用一次构造方法,那么怎么实现呢?我们可以给构造方法加上private修饰符,这样构造方法就只能被本类访问了,其他地方你要创建类对象,要访问构造方法就会被拒绝,但是这样的话在其他类要创建对象时就不能使用当前类对象了,所以为了解决这个问题,可以对外提供一个公共方法返回一个对象。
总结一下就是:
-
构造方法私有化
-
对外提供一个公共方法返回一个对象
代码实现:
/** * @author PgRightWu * @version 1.0 * @date 2020/12/8 16:42 * @description 单例模式 */ /* * 单例模式步骤 * 1.构造方法私有化 * 2.对外提供公共方法返回一个对象 * */ public class Singleton { // 1.构造私有化 private Singleton(){} // 饿汉式(一开始就创建) private static Singleton s = new Singleton(); // 2.对外提供私有方法保证返回一个对象(因为外部调用类的方法要实例化对象,所以用static修饰,可以通过类名调用) public static Singleton getSingleton(){ return s; } } class TestSingleton{ public static void main(String[] args) { Singleton s1 = Singleton.getSingleton(); Singleton s2 = Singleton.getSingleton(); Singleton s3 = Singleton.getSingleton(); System.out.println(s1); System.out.println(s2); System.out.println(s3); } }
这样的话,不管创建多少个Singleton对象,都是指向同一个内存地址,也就是只有一个实例
运行效果:
采用懒汉式实现单例模式,其实也很简单,懒汉式就是什么时候用就什么时候创建对象
实现代码:
public class Singleton { // 1.构造私有化 private Singleton(){} // 懒汉式(什么时候用什么时候创建) private static Singleton s; // 2.对外提供私有方法保证返回一个对象(因为外部调用类的方法要实例化对象,所以用static修饰,可以通过类名调用) public static Singleton getSingleton(){ if(s==null) s = new Singleton(); return s; } }
现在我们来聊一聊单例模式饿汉式与懒汉式的区别
- 饿汉式是在类加载时就进行实例化,而懒汉式默认不会实例化,是什么时候new什么时候才实例化
- 饿汉式是线程安全的,因为在类加载时对象就已经实例化了,而懒汉式不是线程安全的,是什么时候用就什么时候实例化,这样当多个线程同时需要实例化某个对象时,访问实例化代码,就会生成多个对象,所以是线程不安全的(可以通过同步锁解决)。
- 饿汉式是在类加载时实例化对象,所以会占用内存空间,造成内存空间的浪费,而懒汉式是什么时候用什么时候实例化对象,相对不会造成内存浪费。
相关文章推荐
- Java设计模式-观察者模式
- 设计模式---抽象工场模式
- 设计模式--模板方法模式
- 【白话设计模式二】观察者模式(Observer)
- 从追MM谈Java的23种设计模式
- 什么是设计模式
- 设计模式之建造者模式
- Android设计模式之单例模式(一)
- 我学设计模式 之 原型模型模式
- C++设计模式之Prototype(原型)模式
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 (转)
- 设计模式----观察者模式
- 设计模式--js单例
- 设计模式—建造者模式
- java设计模式--责任链(一)
- 设计模式(1)-单例设计模式
- Java设计模式之适配器设计模式
- 设计模式总结—结构型
- 设计模式中类的关系
- 学习设计模式--装饰模式