• Java设计模式之单例设计模式 入门实例


    一、基础概念

      (1).单例设计模式:保证一个类在内存中的对象唯一性。

      (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作。一个程序要基于另一个程序操作后的结果进行操作。

      (3)步骤:

        1.构造函数私有化

        2.自己new创建一个本类对象。

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

      (4)饿汉式:代码以上来就创建一个本类对象。

          懒汉式:有数据传入时,才会创建一个本类对象。

    二、饿汉式(非延迟加载形式)

      (1).示例代码

     1 class Single
     2 {    
     3     //构造函数私有化
     4     private Single(){}
     5     //一上来就创建一个本类对象
     6     static Single s = new Single();
     7     
     8     ////对外提供一个方法getInstance,让其他程序可以获取到这个对象。
     9     public static Single getInstance()
    10     {
    11         return s;
    12     }
    13     
    14 }
    15 class SingleDemo
    16 {
    17     public static void main(String[] args)
    18     {
    19         
    20         Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。
    21         Single s2 = Single.getInstance();
    22         System.out.println(s1==s2);    
    23     }
    24 }

      (2).代码运行

      

    三、懒汉式(延迟加载形式)

      (1).示例代码

     1 class Single
     2 {
     3     //有数据传入时,才会去创建本类对象。
     4     private static Single s = null;
     5     private Single(){}
     6 
     7     public static Single getInstance()//提供接口,获取实例
     8     {
     9         if(s==null)
    10             s = new Single();
    11         return s;
    12     }
    13 }
    14 class SingleDemo
    15 {
    16     public static void main(String[] args)
    17     {
    18         
    19         Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。
    20         Single s2 = Single.getInstance();
    21         System.out.println(s1==s2);
    22     }
    23 }

    (2).代码运行

      

     四、实例代码

      p的名字是王小红,外界p1、p2都可以访问和修改p的名字。当p2修改p的名字为小红后,p1、p2访问p的名字都为小红。

     1 class Person
     2 {
     3     //构造函数私有化
     4     private String name;
     5     private Person(String name)
     6     {
     7         this.name = name;    
     8     }    
     9     //创建一个本类对象,p的名字为wangxiaohong
    10     private static Person p = new Person("wangxiaohong");
    11     
    12     //对外提供一个方法getInstance,让其他程序可以获取到这个对象。
    13     public static Person getInstance()
    14     {
    15         return p;
    16     }
    17     
    18     public void setName (String name)
    19     {
    20         this.name = name;
    21     }
    22     
    23     public String getName()
    24     {
    25         return this.name;
    26     }
    27     public void sleep()
    28     {
    29         System.out.println(name+".....sleep.....");
    30     }
    31     
    32 }
    33 class SingleDemo2 
    34 {
    35     public static void main(String[] args) 
    36     {
    37         Person p1 = Person.getInstance();
    38         Person p2 = Person.getInstance();
    39         p2.setName("xiaohong");//p的名字修改为xiaohong
    40         
    41         //p1和p2都是同一个对象p。
    42         p1.sleep();
    43         p2.sleep();
    44     }
    45 }

    五、代码运行

      

  • 相关阅读:
    性能测试中的二八原则
    OS + Linux Shell Programme / 100 cases
    db postgres openGauss
    OS + Linux sshkeygen / sshcopyid / id_rsa / id_rsa.pub / authorized_keys
    OS + Android performance matrix / memory LeakCanary
    springBoot 使用ConfigurationProperties+PropertySource注解 引入yml配置文件
    SpringBoot2.0集成WebSocket,实现后台向前端推送信息
    springBoot + rabbitMQ +手动确认消息 + 控制(接口、定时任务)消费者上下线
    linux 环境下安装keepalived 并且进行简单的主备配置
    eureka 注册列表低延迟注册、剔除服务配置 实现8s延迟
  • 原文地址:https://www.cnblogs.com/zhuxr/p/8870363.html
Copyright © 2020-2023  润新知