zoukankan      html  css  js  c++  java
  • 单例模式

      单例模式,也就是只有一个实例0-0

      这也是设计模式中最简单的一个模式,

      所有,我要始终记住,设计模式的六大原则

       单一职责原则

        定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 

       里氏替换原则

        定义:所有引用基类的地方必须能透明地使用其子类的对象。

       依赖倒置原则

        定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

       接口隔离原则

        定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 

       迪米特法则

        定义:一个对象应该对其他对象保持最少的了解。

       开闭原则

        定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

     下面我们来看单例模式

      首先我们需要想想,怎么让一个类只实例化一次,有的人说,静态类,有的人说静态方法

        从这里我们就知道了,静态的东西只初始化一次,也就是说只有一个实例,

        所以我们的单例模式也是用了"静态"

      第一种方法如下:使用了一个公开的静态方法来返回一个实例,而且把构造函数设置为了私有的,这样就不可以通过new 关键字来创建新的实例

        class person
        {
            static person pser=null;
            private person()
            { }
            public static person GetInit()
            {
                if (pser==null)
                {
                    pser = new person();
                }
                return pser;
            }
        }

      第二种方法

        可以声明这个类为静态的,基本上和上面那个方法是一样的

        static class man
        {
    
        }

      这样我们就实现了单例模式,当然,你可能会问,这个单例模式有什么用处啊?

        1.单例模式可以一直在内存中保留着,知道垃圾回收,所以对于访问次数高的类,这样很节省资源

        2.提供了对唯一实例的受控访问。

      当然我们上面这样写还是不完善的,因为还有可以有多线程的情况,所以改写代码如下

      

        class person
        {
            static Object o = new Object();
            static person pser = null;
            private person()
            { }
            public static person GetInit()
            {
                if (pser == null)
                {
                    lock (o)
                    {
                        if (pser == null)
                        {
                            pser = new person();
                        }
                    }
                }
                return pser;
            }
        }
    Hold on, everything is possible.
  • 相关阅读:
    java集合 stream 相关用法(1)
    ICE新手入门版
    spring中关于FeignClient的错误 QueryParam.value() was empty on parameter 1
    Java Base64解析
    Java RSA加密以及验签
    项目拆分子工程(简单版)
    mysql "ON DUPLICATE KEY UPDATE" 的使用
    关于多定时任务开发
    AtomicInteger保证线程安全的全局变量
    C++矩阵库 Eigen 快速入门
  • 原文地址:https://www.cnblogs.com/student-note/p/6119412.html
Copyright © 2011-2022 走看看