设计模式之单例模式

设计模式是软件开发人员的一种编码经验的总结,遇到一般问题的通用解决方案,并被众多开发人员所知晓认可;

以下是公认的几类设计模式

创建型模式

  • 工厂方法模式、建造者模式、抽象工厂模式、原型模式、单例模式

结构型模式

  • 桥接模式、代理模式、享元模式、外观模式、装饰器模式、组合模式、适配器模式

行为型模式

  • 备忘录模式、解释器模式、命令模式、中介模式、观察者模式、策略模式、状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式

接下来先来记录下我对单例模式的理解:

单例模式是为了解决什么问题呢?使一个类的对象成为这个类系统中唯一的实例化对象

单例模式可以归纳为:一个类只有一个实例,自动实例化并提供给整个类系统

            几个重要的概念:1、该类只能有一个实例化对象     (提供私有的构造方法)

                                         2、必须自动创建实例化对象   (含有一个静态的该类私有对象)

                                         3、必须自行向整个系统提供实例  (提供一个静态的公有的方法用于创建、获取该类的私有静态对象)

以下为两种经典方案的代码实现:饿汉PK懒汉

 1 package com.designpattern.singleton;
 2 
 3 //饿汉式:创建对象实例的时候直接初始化  空间换时间
 4 public class SingletonHungry {
 5     //1、创建类中私有构造
 6     private SingletonHungry(){
 7         
 8     }
 9     
10     //2、创建该类型的私有静态实例
11     private static SingletonHungry instance=new SingletonHungry();
12     
13     //3、创建公有静态方法返回静态实例对象
14     public static SingletonHungry getInstance(){
15         return instance;
16     }
17 }
 1 package com.designpattern.singleton;
 2 //懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作
 3 //时间换空间
 4 public class SingletonLazy {
 5     //1、创建私有构造方法
 6     private SingletonLazy(){
 7         
 8     }
 9     
10     //2、创建静态的该类实例对象
11     private static SingletonLazy instance=null;
12     
13     //3、创建开放的静态方法提供实例对象
14     public static SingletonLazy getInstance(){
15         if(instance==null)
16             instance=new SingletonLazy();
17         
18         return instance;
19     }
20 }

饿汉模式是在类加载时就创建实例,而懒汉是在第一次使用时才实例化,相比较饿汉第一次加载速度要快于懒汉,但是由于饿汉的实例创建时间比较早,如果长期不调用,会暂用系统空间。总结来说,饿汉是以空间换时间,而懒汉是时间换空间

             

原文地址:https://www.cnblogs.com/raychou1995/p/9797357.html