设计模式(单例模式)

	最近开始学习设计模式,所以针对这一段时间的学习做一个总结。
	目前学习了创建型模式和 结构型模式,包括单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式、
代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式、过滤器模式 这几个设计模式。
下面对这几个模式具体来讲讲他们的区别和一些应用场景。

首先说一下设计模式的7大原则:
开闭原则:对扩展开放,对修改关闭。意思就是扩展新的类,而不是去修改以前的类。

里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立。这句话的意思就是说去继承父类而不改变父类。

依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。这句话的意思是 要面向接口编程,而不是面向具体的实现类。

单一职责原则:一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分  。意思是,每个类都应该有他单一的功能,而不是所有的功能写在一个类。

接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上。 每个类都应该建立自己的接口,而不是所有的类都去实现一个接口。

迪米特法则:最少知识原则(Least Knowledge Principle,LKP),只与你的直接朋友交谈,不跟“陌生人”说话。 如果没有关联的两个类,需要交互,使用中间者。

合成复用原则:又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。意思是优先使用组合,再考虑继承。

下面说说几个创建型模式。创建型模式的关注点在于“怎么样创建出对象?”,将对象的创建与使用分离。降低系统的耦合度。

单例模式:一个单一的类,负责创建自己的对象,同时要确保系统中只有单个对象被创建。
单例模式的特点如下:
1、单个类只能有一个实例(构造器私有)
2、单例类必须创建自己的唯一实例
3、单例类必须对外提供这个实例

单例模式常见的为懒汉式和饿汉式

下图所示为懒汉式
在这里插入图片描述

懒汉式其实就是对象不会主动去创建实例,只有当需要的时候才会去创建出来。
而构造器私有化是为了只在当前类里面实例化对象,外部想要实例化对象只能调用该类对外暴露的方法,这样就保证了单个类只有一个实例。
而这种懒汉式是线程不安全的,因为没有加锁,所以不支持多线程。

下图所示为饿汉式
在这里插入图片描述

饿汉式相比于懒汉式,像它的名字一样,他是直接去创建了一个实例,然后调用方法的时候把实例返回回去就行了。

还有一种单例模式较为复杂一点的,是双检索,如图所示
在这里插入图片描述

双检索能够在多线程情况下保持高性能,第一层判断是因为如果每次创建对象都去获取锁,会很消耗资源和影响效率,
所以加一个这个判断,只有没有实例化的时候才去获取锁,而加了锁之后为什么还要去进行第二次的判断呢,这是因为
在第一次判断之后可能还有其他线程获取过锁已经创建了实例了,所以满足这些条件之后才能去创建对象。

那么什么场景需要用到单例模式呢?像多线程的线程池,数据库的连接池这些,都是用的单例模式,只能存在单一的实例。

下一篇说原型模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值