zoukankan      html  css  js  c++  java
  • 003.设计模式之单例模式

    单例设计模式(★★★★★★)    (笔试必考)
    (1)基本概念
       当一个类对外提供且只提供一个对象时,这样的类叫做单例类。   //比如说要打开任务管理器,只能打开一个,而不能打开多个,
       而设计单例类的思想和编程模式叫做 单例设计模式。
     
    (2)实现流程
       a.私有化构造方法,使用private关键字修饰;
       b.提供本类类型的引用指向本类的对象,使用private static关键字共同修饰;  
       c.提供公有的get方法负责将对象返回出去,使用static关键字修饰;  
     
    (3)实现方式
       单例设计模式分为两种:饿汉式 和 懒汉式,在以后的开发中推荐饿汉式。
     1 public class Singleton{
     2     
     3         //1.将自定义无参构造进行private限制
     4         //此时在Singleton类外无法直接创建对象,只能在类内创建对象
     5         private Singleton(){
     6             
     7         }
     8         
     9         //2.在类内创建了成员对象后,对其进行private封装,此时该创建的对象属于对象层级;
    10         //只可以对象来调用,但是在TestSingleton类中无法创建对象,故使用static来使得
    11         //该成员对象转换为类层级,此时可以想通过Singleton.sin 来调用,但由于是private封装
    12         //故类外无法调用,   只能令找它法
    13         //private static Singleton sin = new Singleton();  //饿汉式单例模式构建单例实体
    14         private static Singleton sin = null;   //懒汉式单例模式构建单例实例
    15         
    16         //3.可以创建一个类层级的public的公有方法来实现
    17         //此时可以在类外通过调用getInstance() 进行获得类中创建的实例  转=>TestSingleton.java
    18         public static Singleton getInstance(){
    19                 return sin;
    20                 /*if(sin == null){  //懒汉式单例模式构建单例实例
    21                         sin = new Singleton();
    22                 }
    23                 return sin;*/
    24         }        
    25 }
    Singleton.java (详细解析版)
     1 /*
     2         测试Singleton类,要求Singleton类中 只能创建一个对象
     3 
     4 */
     5 public class TestSingleton{
     6     
     7         public static void main(String[] args){
     8                 
     9                 //此时可以创建不止一个对象,原因在于可以调用编译器提供的
    10                 //默认的无参构造函数,不受控制,所以需要自定义无参构造函数,
    11                 //且加private进行封装,此时在Test类中无法用对象的创建来自动调用无参构造
    12                 //此时可以在Singleton类内直接创建一个对象   转=>Singleton.java
    13                 /*Singleton s1 = new Singleton();    
    14                 Singleton s2 = new Singleton();
    15                 System.out.println(s1 == s2);*/
    16                 Singleton s3 = Singleton.getInstance();   
    17                 Singleton s4 = Singleton.getInstance();   
    18                 System.out.println(s3 == s4);   //true     说明只创建了一份实例            
    19         }
    20 }
    TestSingleton.java
     1 /*
     2      编程实现Singleton类的封装
     3  */
     4 public class Singleton{
     5 
     6     //2.提供本类类型的引用指向本类的对象
     7     //private static Singleton sin = new Singleton();  //饿汉式
     8     private static Singleton sin = null;               //懒汉式
     9 
    10     //1.私有化构造方法,使用private关键字修饰
    11     //表示该构造方法只能在本类的内部使用,不能在类外使用
    12     private Singleton(){}
    13 
    14     //3.提供公有的get方法将上述对象返回出去
    15     public static Singleton getInstance(){
    16          //return sin;
    17          if(null == sin){
    18              sin = new Singleton();
    19          }
    20          return sin;
    21     }
    22 }
    Singleton.java //简析版
     1 /*
     2      编程实现Singleton类的测试
     3  */
     4 public class TestSingleton{
     5 
     6     public static void main(String[] args){
     7 
     8         //Singleton s1 = new Singleton();
     9         //Singleton s2 = new Singleton();
    10         //System.out.println(s1 == s2); //false   
    11         Singleton s1 = Singleton.getInstance(); 
    12         Singleton s2 = Singleton.getInstance(); 
    13         System.out.println(s1 == s2); //true
    14     }
    15 }
    TestSingleton.java
  • 相关阅读:
    Gallery平滑移动
    HDU 4308 BFS Saving Princess claire_
    css 浏览器兼容性问题解决
    CCPlace,CCFlip*,CCToggleVisibility,CCMoveTo*,CCJumpTo*,CCScale*,CCRotate*,CCSkew*,fade,CCCardinalSp*
    存储过程和输出分辨率表菜单JSON格式字符串
    Vertica变化Local时间到GMT时间
    【codeforces】Codeforces Round #277 (Div. 2) 解读
    Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍
    计算质数-埃里克森筛法(间隔黄金武器)
    IP地址分类
  • 原文地址:https://www.cnblogs.com/keenly/p/9861242.html
Copyright © 2011-2022 走看看