Java设计模式之单例模式

Posted by Sunfy on 2019-07-03
Words 1.1k and Reading Time 4 Minutes
Viewed Times
Viewed Times
Visitors In Total

java设计模式:设计模式是被大多数人反复使用,在软件开发过程中所面临的一般问题的解决方案。是大多数人员经过较长时间所总结出来的的一套代码设计经验的总结;

什么是设计模式(Desin Pattern

设计模式是被大多数人反复使用,在软件开发过程中所面临的一般问题的解决方案。是大多数人员经过较长时间所总结出来的的一套代码设计经验的总结;

为什么使用设计模式?

使用设计模式可以提高代码的重用性,一定程度保证代码的可靠性,也可以帮助阅读代码的人员快速理解;

设计模式种类

  • 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 结构型模式(7):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型模式(11):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式遵循的原则

  1. 开闭原则(Open Close Principle):对扩展开放,对修改关闭。
  2. 里氏代换原则(Liskov Substitution Principle):只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
  3. 依赖倒转原则(Dependence Inversion Principle):这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体。
  4. 接口隔离原则(Interface Segregation Principle):使用多个隔离的接口来降低耦合度。
  5. 迪米特法则(最少知道法则)(Demeter Principle):一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
  6. 合成复用原则(Composite Reuse Principle):原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改,

单例模式

单例模式主要适用于在整个系统中,我们只需要一个(有且仅有一个),若存在多个,可能会出现一些不应有的状况,比如资源占用过多、与预期值不同等后果。主要用在配置文件、线程池、缓存、日志对象等;

分类:

饿汉模式

主要特点是,在类文件加载的时候就会创建,不论是否有无方法对其进行调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.sunfy.singleton;
/*
* static 静态的成员,是类所有,这样的对象会在类加载时就会创建类的唯一一个实例(饿汉模式)
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}

//2.创建类的唯一实例,使用private(控制访问,安全考虑) static修饰
private static Singleton instance=new Singleton();

//3.提供一个用于获取实例的方法,使用public static(改为类所有,可以直接点)修饰
public static Singleton getInstance(){
return instance;
}
}

懒汉模式

主要特点是:加载类文件时不会进行创建,只有当调用该对象时才会创建,而且只有第一次调用时会创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.sunfy.singleton;
/*
* 懒汉模式
*/
public class Singleton2 {
//1.将构造方式私有化,不允许外边直接创建对象
private Singleton2(){
}

//2.声明类的唯一实例,使用private static修饰
// 只是声明,没有直接进行创建,当第一次获取的时候会创建
private static Singleton2 instance;

//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}

二者区别

  • 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
  • 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全

Copyright 2021 sunfy.top ALL Rights Reserved

...

...

00:00
00:00