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
  • 相关阅读:
    不用再去找rem了,你想要的rem都在这
    linux下ftp配置文件详解
    Linux chmod命令修改文件与文件夹权限命令代码
    如何在linux下开启FTP服务
    解决ftp客户端连接验证报错Server sent passive reply with unroutable address. Using server address instead
    预定义编译器宏
    类的成员变量修饰 const 和static
    【转】svn http://提示svn: Unrecognized URL scheme错误
    EVEREST Ultimate Edition 5.50 正式版 序列号
    [转]Linux下查看文件和文件夹大小
  • 原文地址:https://www.cnblogs.com/keenly/p/9861242.html
Copyright © 2011-2022 走看看