zoukankan      html  css  js  c++  java
  • Java——设计模式(单例模式)

    
    /*

     * 设计模式: 对问题行之有效的解决方式,其实他是一种思想。

     * 1.单例设计模式。

     *  解决问题:  就是可以保证一个列在内存中的对象唯一性。

     * 

     *如何保证对象的唯一性:

     *1. 不允许其他程序用new创建该类对象。

     *2. 在该类中创建一个本类实例。

     *3. 对外提供一个方法让其他程序可以获取该对象。。

     *

     *步骤:

     *1.私有化该类构造函数。

     *2.通过new在本类中创建一个本类对象。

     *3.定义一个公有的方法,将创建的对象返回。

     * 

     */

    第一种方式   构建单例模式  饿汉式

    final class SingleTest

    {

         //设为private  保证外界不能访问 static保证其唯一性  类一加载对象就已经存在的

    private static SingleTest s = new SingleTest();

    private SingleTest(){};//构造函数私有化   保证不能new

    public static SingleTest getInstance()//对外提供一个public方法。 比返回一个单例对象

    {

    return s;

    }

    }

    =========================================================================================================

    第二种方式  构建单例模式  懒汉式

    //延迟加载形式。

    final class SingleTest2//类加载进来 , 没有对象,  只有调用了getInstance()方法时, 才会创建对戏。

    {

    private static SingleTest2 s = null;//设为private  保证外界不能访问。。   static保证其唯一性

    private SingleTest2(){};//构造函数私有化   保证不能new

    public static SingleTest2 getInstance()//对外提供一个public方法。 比返回一个单例对象

    {

    if(s==null)

    {

    s = new SingleTest2();

    }

    return s;

    }

    }





    ==============================================线程安全模式======================

    //饿汉模式(线程安全模式)

    class Single

    {

    private final Single s = new Single();

    private Single(){};

    public synchronized Single getInstace()

    {

        return s;

    }

    }

    //懒汉模式(线程安全模式)

    class Single2

    {

    private static Single2 s = null;

    private Single2(){};

    public static Single2 getInstance()

    {

    if(s==null)

    {

    synchronized(Single2.class)

    {

    if(s==null)

    {

        s = new Single2();

    }

    }

    }

        return s;

    }

    }


    ====================================================================================

    // TODO Auto-generated method stub

      /*

       * Runtime没有构造方法 ,说明该类不可以创建对象。又发现还有非静态的方法,

       * 说明该类应提供静态的返回该类对象的方法。

       * 而且只有一个,说Runtime类使用了单例模式

       */

      Runtime r = Runtime.getRuntime();


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Linux .bashrc文件设置快速访问快捷键
    Fiddler如何添加ServerIP显示
    软件测试工程师常用工具汇总
    [ASP.NET Core开发实战]基础篇04 主机
    《数据结构与算法之美》24——堆的应用
    [ASP.NET Core开发实战]基础篇03 中间件
    《数据结构与算法之美》23——堆和堆排序
    [ASP.NET Core开发实战]基础篇02 依赖注入
    [ASP.NET Core开发实战]基础篇01 Startup
    [ASP.NET Core开发实战]开篇词
  • 原文地址:https://www.cnblogs.com/blogs-chao/p/4764922.html
Copyright © 2011-2022 走看看