7大设计原则之单例设计模式

心心念清明节去玉渊潭玩,结果没预约到票。太惨了吧我。有去的朋友给失丶忆晒几张照片吧

设计模式

如平时一样,早上早到工位一小时看看书,瞎整理一会。噢力给,今天4.1愚人节
失丶忆:x哥,你这会有空吗,我有个事
x哥:你讲
失丶忆:我想辞职
x哥:准备准备交接工作,交接完走的时候给我说一声
ps: 啪啪啪,瞎意淫什么,看看设计模式吧

  • 设计模式常用的七大原则
    1. 单一职责原则
    2. 接口隔离原则
    3. 依赖倒转原则
    4. 里氏替换原则
    5. 开闭原则 ocp
    6. 迪米特法则
    7. 合成复用原则

以上是设计模式的依据,还是很有必要去了解以及掌握,我就不一一列出它们的定义了。
我们来重点说一下迪米特法则:也称最少知道原则,一个对象应该对其它对象保持最少的了解,这样有利于维护她们之间的关系。呸,渣男。

回归单例设计模式


  • 饿汉式(静态常量实现。可用)
class Singleton{
	// 私有化构造方法
	private Singleton(){};
	private final statis Singleton instance = new Singleton();
	// 向外提供获取实例的方法
	public static Singleton getInstance() {
		return instance;
	}
}

优点:类加载的时候就实例化,避免了线程同步的问题
缺点:可能会造成内存浪费,没有达到懒加载的效果

  • 饿汉式(静态代码块。可用
class Singleton {
	private  final static Singleton instance;
	private Singleton(){};
	static {
		instance = new Singleton();
	}
	public static Singleton getInstance() {
		return instance;
	}
}

优缺点:和静态常量一样,只是写法不同。

  • 懒汉式(线程不安全,慎用)
class Singleton {
	private static Singleton instance;
	private Singleton(){};
	public static Singleton getInstance() {
		if(instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

优点:比起上面的饿汉式,起到了懒加载的效果
缺点:线程不安全,实际开发中不要使用

  • 懒汉式(加锁,线程安全)
class Singleton{
	private Singleton(){};
	private static Singleton instance;
	public static synchronized getInstance() {
		if(instance == null) {
			instance = new Singleton();	
		}
		return instance;
	}
} 

优缺点:加锁实现了线程安全问题,但是效率较低。

  • 懒加载(双重检查,推荐使用)
class Singleton{
	private Singleton(){};
	private static volatile  Singleton instance;
	public static Singleton getInstance() {
		if(instance == null) {
			synchronized(Singleton.class) {
				if(instance == null) {
					instance = new Singleton();
				}	
			}
		}
		return instance;
	}
}

优点:懒加载且线程安全,推荐使用哦

  • 静态内部类
class Singleton {
	private Singleton(){};
	private static class SingletonInstance {
		private static final Singleton INSTANCE = new Singleton();	
	}
	public static Singleton getInstance() {
		return SingletonInstance.INSTANCE;
	}
}

优点:线程安全,懒加载,推荐使用 利用静态内部类的特点实现

  • 枚举
public enum EnumSingleton {
	INTANCE;
	public EnumSingleton getInstance() {
		return INSTANCE;
	}
}

优点:推荐使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失忆老幺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值