单例模式

来源:互联网 发布:wordpress转zblog php 编辑:程序博客网 时间:2024/06/05 11:28

单例模式

       饿汉式:类一加载就创建对象
       懒汉式:用对象时采取创建对象


单例模式的思想保证在类内存中只有一个对象

         如何实现:1.把构造方法私有

                           2.在成员位置自己创建一个对象

                           3.写一个公共的方法去访问

下面写了两个例子学生类(饿汉式)和教师类(懒汉式)

//饿汉式(学生类)
public class Student {


 private Student(){}

//构造方法私有不让外界创造对象

 private static Student s=new Student();

 //自己造一个对象,静态方法只能访问静态成员,所以加static
 //为了不让外界随便访问这个值所以加private

 


 public static Student getStudent(){
return s;

 }

 //提供公共的访问方式,为了让外界访问所以加静态

}

学生测试类
/*
 * 单例模式:保证类在内存中只有一个对象
 * 
 * 要点:
 *   A:把构造方法私有
 *   B:自己创建一个对象
 *   C:提供一个公共的方法访问 
 */

public class StudentDemo {
  public static void main(String []args){
 
 Student s1= Student.getStudent();
 
 Student s2=Student.getStudent();
 
 System.out.print(s1==s2);
  }
}
教师类(懒汉式)
public class Teacher {
  private Teacher(){}
  //构造方法私有不让外界创建对象
  private static Teacher t=null;
  //不让外界改变加private 静态方法只能访问静态成员
  
  public static Teacher getTeacher(){
   if(t==null){
 t=new Teacher();
      }
//当需要对象时触发if创建对象
return t;
  }
  
}
教师测试类
/*
 * 懒汉式:
 *
  (可能会出现线程问题)
 *    A:懒加载
 *    B:线程问题
 *          1:是否多线程  是
 *          2:是否有共享数据 是
 *          3:是否有多条语句操作共享数据 是
 *          
 */
public class TeacherDemo {
 public static void main(){
Teacher t1 =Teacher.getTeacher();
Teacher t2 =Teacher.getTeacher();
System.out.println(t1==t2);
 }
}

在面试时加上synchronized解决线程问题
创建对象时加上synchronized如下图


原创粉丝点击