设计模式之单例模式

来源:互联网 发布:淘宝调研网站 编辑:程序博客网 时间:2024/06/05 03:31

单例设计模式:保证当前类有且仅有一个对象,不允许被创建多个实例

分类:饿汉式、懒汉式

实现思路:构造函数私有化

      声明一个本类对象静态引用

      提供获取当前实例的静态方法


/**

 *单例模式基本思想:在类里面将构造方法私有化,在类里面提供类唯一的对象,

 * 创建一个方法,该方法返回的就是这个对象(单例模式只能用于单线程,

 * 如果有多个线程同时调用类的方法来构造对象,那么它构造的对象可能就不是同一个;

 * 因此要给返回对象的那个方法加synchronized关键字,防止一个线程在创建对象的时候

 * 另一个线程也在创建该对象)

 */


单例模式之类图:


饿汉式浅析:

package SingleExampleModel1;public class Student {public String name;//1.构造方法私有化private Student(){}//提供唯一对象private static Student student = new Student();//提供一个get实例函数,返回对象public static Student getInstance(){return student;}}

package SingleExampleModel1;public class Test {/** * @param args */public static void main(String[] args) {Student stu1 = Student.getInstance();stu1.name = "aaa";Student stu2 = Student.getInstance();stu1.name = "bbb";Student stu3 = Student.getInstance();stu1.name = "ccc";}}




浅析单例模式之懒汉式(多线程问题):

package SingleExampleModel;public class Student {public String name;//1.构造方法私有化private Student(){}private Student(String name){this.name = name;}//2.提供唯一的对象private static Student stu;//3.提供一个get实例的函数public static synchronized Student getInstance(String n){if(stu==null){stu = new Student(n);}return stu;}}

测试类:

package SingleExampleModel;public class Test {/** * @param args */public static void main(String[] args) {new Thread(){public void run() {Student stu = Student.getInstance("abc");};}.start();new Thread(){public void run() {Student stu1 = Student.getInstance("abc");};}.start();new Thread(){public void run() {Student stu2 = Student.getInstance("abc");};}.start();}}





















0 0