单例设计模式

单例设计模式

什么是设计模式

  1. 静态方法和属性的经典使用

  2. 设计模式是:在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决方法

什么是单例模式

  • 单个实例的设计模式

  • 所谓类的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象的实例,并且该类只提供一个取得其对象实例的方法

单例模式的分类:

  1. 饿汉式

  2. 懒汉式

饿汉式与懒汉式的区别

  1. 二者最大的区别是:创建时机不同:饿汉式在类加载的时候就创建了对象实例。而懒汉式是在使用时才存在

  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题-----(当多个线程同时进入判断时)

  3. 饿汉式存在浪费资源的可能,因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了。懒汉式是使用时才创建,就不存在这个问题

  4. javaSE标准类中,java.lang.Runtime就是经典的单例模式

饿汉式

步骤实现:

  1. 构造器私有化

  2. 类的内部创建对象

  3. 向外暴露一个静态的公共方法。getInstance

代码实现:

/** * 饿汉式 * 1. 构造器私有化-----防止在类的外部直接创建 * 2. 在类的内部创建对象(该对象是静态的) * 3. 向外暴露一个静态的公共方法。getInstance * 他为什么是饿汉式 * 因为: *    当调用类的静态变量时,会导致类被加载,静态的对象会被执行。静态对象一执行,那么这个对象就会存在了 */public class SingleTon01 {  public static void main(String[] args) {    Cat instance = Cat.getInstance();    System.out.println(instance);    Cat instance1 = Cat.getInstance();    System.out.println(instance1);    //instance对象与instance1同一个对象    System.out.println(instance==instance1);//true   }}class Cat{  private String name;  public static int n1 = 100;  //为了在静态方法中,返回其对象,需要将其修饰为静态方法  //对象,通常为重量级的对象,饿汉式可以会造成创建了对象,但没有使用,会造成资源的浪费  private static Cat cat = new Cat("小红");  private Cat(String name) {    this.name = name;   }  public static Cat getInstance(){

    return cat;   }

  @Override  public String toString() {    return "Cat{" +        "name='" + name + '\'' +        '}';   }}

懒汉式

步骤:

  • 1.构造器私有化

  • 2.定义一个私有的静态属性对象

  • 3.提供一个public 的static方法---中间加判断

代码实现:

/** * 懒汉式 * *   当类被调用是,不会创建对象,需要自己调用,后面再次调用,会返回上次创建的对象,从而保证了单例 */public class SingleTon02 {  public static void main(String[] args) {    Dog instance = Dog.getInstance();    System.out.println(instance);    //第二次调用的时候,会得到上次创建的对象    Dog instance1 = Dog.getInstance();    System.out.println(instance1);    System.out.println(instance==instance1);//true   }}class Dog{  private String name;  private static Dog dog;  private Dog(String name) {    this.name = name;   }  public static Dog getInstance(){    if(dog == null){      dog = new Dog("大黄");     }    return dog;   }

  @Override  public String toString() {    return "Dog{" +        "name='" + name + '\'' +        '}';   }
(0)

相关推荐

  • 详解JAVA面向对象的设计模式 (一)、单例模式

    本系列,记录了我深刻学习设计模式的过程.也算是JAVA进阶学习的一个重要知识点吧. 与设计相关的代码会贴出,但是基础功能的代码会快速带过.有任何错误的地方,都欢迎读者评论指正,感谢.冲冲冲! 单例模式 ...

  • 设计模式-创建型-单例模式

    前言: 单例模式,顾名思义,只存在一个实例.官方定义:对于类的单例模式设计,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). ...

  • 设计模式:单例模式 (关于饿汉式和懒汉式)

    定义 单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存. 单例模式的应用场景很多, 比如我们电脑的操作系统的回收站就 ...

  • java常见设计模式之---单例模式

    java常见设计模式之---单例模式 1.单例模式简介 应用场景举例 2.单例模式的特点 3.单例模式和静态类 4.单例模式的经典实现 饿汉式单例(典型实现) 饿汉式-静态代码块 懒汉式单例创建,五种 ...

  • 创建型模式之单例模式

    定义与特点 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成 ...

  • 面试高频-吃透单例设计模式

    单例设计模式 单例设计模式的介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法). 比如 Hiber ...

  • 单例模式的实现

    记一下学习单例模式的笔记: 单例就是要保证该类仅有一个实例.实现完全封闭的单例(外部不能new)其实就要两点要求: 全局访问:需要一个该类型的全局静态变量,每次获取实例时都要判断它是否null,不存在 ...

  • 这几种单例模式写法你知道几种

    这几种单例模式写法你知道几种

  • 23种设计模式入门 -- 单例模式

    单例模式:采用一定的方法,使得软件运行中,对于某个类只能存在一个实例对象,并且该类只能提供一个取得实例的方法. 分类: 饿汉式 静态常量方式 静态代码块方式 懒汉式 普通方式,线程不安全 同步方法方式 ...

  • Java基础之:单例模式

    设计模式 设计模式是在大量的实践中总结和理论化之后优选的代码结构.编程风格.以及解决问题的思考方式 .设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索. 单例模式 对于 ...

  • 设计模式笔记(一):Singleton 设计模式

    今天开始学习设计模式,借此机会学习并整理学习笔记. 设计模式是一门不区分语言的课程,什么样的编程语言都可以用到设计模式.如果说java语法规则比作武功招式的话,那么设计模式就是心法. 设计模式共有23 ...