23种设计模式python,23种设计模式入门 -

单例模式:采用一定的方法,使得软件运行中,对于某个类只能存在一个实例对象,并且该类只能提供一个取得实例的方法。

分类:

饿汉式

静态常量方式

静态代码块方式

懒汉式

普通方式,线程不安全

同步方法方式,线程安全

同步代码块方式,线程不安全

其他方式

双重检查

静态内部类

枚举

实现思路:

想要实现单例,即不能让外部随意的去实例化对象。所以需要构造器私有

既然不允许外部去创建了,所以需要在类的内部创建对象

外部需要使用对象,所以需要对外提供一个获取实例的方法

一、饿汉式

根据对象创建的时机,可以分为饿汉式和懒汉式。饿汉式,即在类加载的时候立即创建实例,根据所学知识我们可以很快想到要使用static关键字将属性和类相关联。以下提供两种书写方式供参考。

特点

优点:写法简单,在类装载的时候就完成实例化,避免了线程同步问题

缺点:在类装载的时候就完成了实例化,如果开始至终都没有使用这个实例,会造成内存浪费

1.静态常量方式

class Singleton01{ //构造器私有,防止外部new private Singleton01(){ } //内部创建对象 private final static Singleton01 instance = new Singleton01(); //提供给外部创建实例的静态方法 public static Singleton01 getInstance(){ return instance; }}

2.静态代码块方式

class Singleton02{ //构造器私有,防止外部new private Singleton02(){ } //内部创建对象 private static Singleton02 instance; static { instance = new Singleton02(); } //提供给外部创建实例的静态方法 public static Singleton02 getInstance(){ return instance; }}

这种方式和静态常量的实现方式逻辑和优缺点是一样的,只是写法不同。

二、懒汉式

懒汉式,即在类加载时并不实例化对象,等到使用对象实例的时候才去实例化,也被称为懒加载效果。这样做的好处可以节约资源,减少浪费,只有需要的时候采取创建,不需要就不会实例化。

1.普通方式(线程不安全)

class Singleton01{ // 构造器私有 private Singleton01(){ } // 定义静态变量,实例化留在获取实例的getInstance方法,起到懒加载效果 private static Singleton01 instance; public static Singleton01 getInstance(){ // 判断如果为空才创建,起到懒加载 if (instance == null){ instance = new Singleton01(); } return instance; }}

问题:在多线程情况下,假设类还未第一次实例化,此时两个进程同时执行到了if(instance==null),而未来得及往下执行时,此时两者校验都成立,都会执行实例化操作,将有可能出现创建多个实例的问题。

2.同步方法方式(线程安全)

既然存在线程安全问题,肯定会想到使用synchronized关键字来解决

class Singl.........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值