设计模式——单例设计模式

单例设计模式:

基本概念:单例模式是指在类中只能实例化一次对象.
单利模式的分类:分为饿汉式和懒汉式两种单例模式.
1.饿汉式:提前在类中实例化一次对象,并且在类外能够访问其中的私有结构方法,若要访问其私有构造方法,类外不能通过
实例化对象进行访问,所以只能在类内实例化对象访问。在类中实例化产生对象,必须使用static关键字。因为包装的是私有属性,要访问私有属性,联想到getter(),setter()方法。 所以在类中实现一个geter方法,能够返回实例化的对象。最后通过其内部的对象,实现内部的成员方法。
代码如下:

public Singleton{
            private static final Singleton singtelon=new Singleton();   //在内部提前实例化对象(饿汉式特点),使用final关键字,staic为了使对象singleton没有产生时对singleton(普通属性)进行内存的空间分配或者使用singleton对象.
            private Singleton(){};   //内部的私有构造方法,使类进入封闭状态
            public static Singleton getInstence(){
                       return singleton;        //使用singleton对象
            }
            public void print(){
                       System.out.println("单利——饿汉式");     //通过调用instence对象,访问到内部的成员方法
            }
}
public class bite{
           public static void main(String[] args){
                          Singleton singteton=null;    //声明对象
                          singleton=Singlenton.getInstence();   //通过调用内部的get方法 访问其私有属性
                          singleton.print()     //在外部不用实例化对象访问内部的成员方法
           }
}

2.懒汉式单例模式:和饿汉式基本概念相同,在第一次需要使用对象的情况下,再实例化对象,访问内部的成员方法。
代码如下:

class Singtelon{
          private static Singleton instence;  //先声明对象,不用final修饰
          private Singleton{}; 无参私有构造方法
          public static Singleton getInstence(){
                   if(instence==null){
                           instence=new instence;
                   }
                   return instence;
         }
         public void print("单利——懒汉式");
}
public class bite{
         public static void main(String[] args){
                  Singleton singleton=null ;    //声明对象
                  singleton=Singleton.getInstence();
                  singleton.print();
                    
         }
}

懒汉式的特点:可能会产生多线程的安全问题,而饿汉式不会,原因是当Singleton实例化对象的时候,可能会出现第二次线程也进入了条件语句,会产生多次的实例对象。

你可能感兴趣的:(设计模式——单例设计模式)