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
  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/keenly/p/9861242.html
Copyright © 2011-2022 走看看