Java单例设计模式

来源:互联网 发布:汉语语法知乎 编辑:程序博客网 时间:2024/06/07 14:38

注:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。

       23种设计模式。


一、单例设计模式:

解决的问题:使得一个类只能创建一个对象。

方法一(饿汉式):

public class TestSingleton {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);//true}}class Singleton {//1.私有化构造器,使得在类的外部不能调用此构造器private Singleton() {}//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象private static Singleton instance = new Singleton();//3.通过公共的方法来调用私有的对象//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字public static Singleton getInstance() {return instance;}}
方法二(懒汉式:可能存在线程安全问题):
public class TestSingleton {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);//true}}class Singleton {//1.私有化构造器,使得在类的外部不能调用此构造器private Singleton() {}//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象private static Singleton instance = null;//3.通过公共的方法来调用私有的对象//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字public static Singleton getInstance() {if(instance == null) {instance = new Singleton();}return instance;}}


懒汉式线程安全解决方式:

/* * 对于懒汉式的线程安全问题:使用同步机制 * 对于一般的方法内,使用同步代码块,可以考虑使用this。 * 对于静态方法而言,使用当前类本身充当锁。 */public class TestSingleton {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);//true}}class Singleton {//1.私有化构造器,使得在类的外部不能调用此构造器private Singleton() {}//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象private static Singleton instance = null;//3.通过公共的方法来调用私有的对象//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字public static Singleton getInstance() {if(instance == null) {synchronized(Singleton.class) {if(instance == null) {instance = new Singleton();}}}return instance;}}


0 0
原创粉丝点击