JavaSE-单例模式初学
package com.btp.t2; /* * 设计模式:大量的实践中总结和理论化之后优选的代码结构,编程风格和解决问题的 * 思考方式 * 23种设计模式 * * 单例的设计模式: * 1.解决的方法:使得一个类只能够创建一个对象 * 2.具体步骤:①私有化构造器,使得在类的外部不能调用此构造器 * ②在类的内部创建一个类的实例 * ③私有化此对象,通过公共方法来调用 * ④此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance * 也必须是static的 * *1.饿汉式:不管用不用,对象都创建了:private static Singleton instance=new Singleton(); *2.懒汉式:用对象的时候才创建,不用就不创建:private static Singleton1 instance=null; * instance=new Singleton1(); */ public class TestSingleton { public static void main(String[] args) { //饿汉式 /*Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); System.out.println(s1 == s2);//true*/ //懒汉式 Singleton1 s3=Singleton1.getInstance(); Singleton1 s4=Singleton1.getInstance(); System.out.println(s3 == s4);//true,因为只有一个对象,所有引用指向同一片堆内存 } } //只能创建单个实例 //饿汉式:在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 class Singleton { //1.私有化构造器,使得在类的外部不能调用此构造器 private Singleton() { } //2.在类的内部创建一个类的实例 private static Singleton instance=new Singleton(); //3.私有化此对象,通过公共方法来调用 //4.此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance也必须是static的 public static Singleton getInstance() { return instance; } } //懒汉式:可能存在线程安全问题 class Singleton1 { //1.私有化构造器 private Singleton1() { } //2.声明私有对象 private static Singleton1 instance=null; //3.创建调用本类私有对象的方法,调用这个方法的时候才真正创建对象 public static Singleton1 getInstance() { if(instance == null) { instance=new Singleton1(); } return instance; } }