美文网首页
设计模式篇-单例模式

设计模式篇-单例模式

作者: mg驿站 | 来源:发表于2020-04-19 14:33 被阅读0次

单例模式,保证一个类只有一个实例,并且自行实例化,并想整个系统提供这个实例。

 一、注意事项:

                   1、构造函数可以用private修饰

                   2、单例对象实例化过程,在多线程过程中,需要保证不会产生多个实例。

                   3、单例模式需要注意垃圾回收机制,如果我们一个单例对象在内存中长久不使用,jvm会认为这是一个垃圾对象,在CPU资源空闲情况下对对象进行清理。

 二、应用场景 :业务逻辑上限定不能多例只能单例的情况

三、实现方式:

 1、饿汉模式

       优点:实现简单,类加载就实现了实例化,没有现成同步问题

       缺点:类加载就实现了实例化,如果实例化对象一直不使用,会造成内存浪费

       例子:

public class SinglePattern {

          public static final SinglePattern single =new SinglePattern();

          private SinglePattern(){}

          public static SinglePattern getSingle(){

            return single;

           }

           public void doSomething() {System.out.println("i am singlepattern"); }

           public static void main(String[] args) {

                     SinglePattern.getSingle().doSomething();

          }

}

  2、简单懒汉模式(线程不安全)

       优点:实现简单,第一次调用才会初始化,避免内存浪费

       缺点:不支持多线程,高并发情况下会出现多个实例化对象

       例子:

public class UnsafeSinglePattern {

            public static UnsafeSinglePattern single ;

            private UnsafeSinglePattern(){}

             public static UnsafeSinglePatterngetSingle()

              {

                        if(single==null){single = new UnsafeSinglePattern();}

                        return single;

                 }

                  public void doSomething()

                  {

                         System.out.println("i am unsafesingle pattern");

                  }

}

         3、懒汉模式,线程安全

              优点:第一次调用才会初始化,避免内存浪费,支持多线程

              缺点:需要加锁来保证单例的初始化,会影响效率

              例子:

public class SafeSinglePattern {

        public static SafeSinglePattern single ;

        private SafeSinglePattern(){}

        public static synchronizedSafeSinglePattern getSingle()

        {

            if(single==null)

            {

                                single= new SafeSinglePattern();

            }

            return single;

        }

        public void doSomething()

        {

            System.out.println("i am safesingle pattern");

        }

        public static void main(String[] args) {

            SafeSinglePattern.getSingle().doSomething();

        }

    }

4、懒汉模式,双重检验锁

      优点:支持多线程,并且采用双检测机制,保持高性能

      缺点:实现复杂

       例子:

public class SafeSinglePattern {

        public static SafeSinglePattern single ;

        private SafeSinglePattern(){}

        public static SafeSinglePattern getSingle()

        {

            if(single==null)

            {

              synchronized(SafeSinglePattern.class)

                {

                    if(single ==null)

                    {

                        single = new SafeSinglePattern();

                    }

                }

            }

            return single;

        }

        public void doSomething()

        {

            System.out.println("i am safesingle pattern");

        }

        public static void main(String[] args) {

          SafeSinglePattern.getSingle().doSomething();

        }

    }

}

注意:如果在多线程情况下尽量使用双重检验锁的模式。

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式(Swift) - 3.观察者模式、建造者模式

    上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

网友评论

      本文标题:设计模式篇-单例模式

      本文链接:https://www.haomeiwen.com/subject/jbnpbhtx.html