zoukankan      html  css  js  c++  java
  • 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 }

    五、代码运行

      

  • 相关阅读:
    多线程学习笔记第一篇
    当Visual Studio中win32控制台应用程序的注释也会生产代码时……
    博客行文及排版技法
    Debian Linux下的Python学习——安装python,vim
    onhashchange事件
    MyEclipse9 Maven开发Web工程 详细配置
    Java面向对象(上)
    lucene 的分析器(analyzer)与分词器(tokenizer)和过滤器(tokenfilter)
    java编程陷阱
    solr中文分词(mmseg4j)
  • 原文地址:https://www.cnblogs.com/zhuxr/p/8870363.html
Copyright © 2011-2022 走看看