java设计模式之单例模式

单列模式

           定义:

                在一个应用程序中单列模式的类有且只有一个实例,单列模式中又分为两种,饿汉模式和懒汉模式。

    一、饿汉模式

           定义:饿汉模式,是在类加载的时候便创建实例,所谓饿汉,即表示这个类很饥渴,需要快速得到类的实例,所以在类加                      载的时候便会产生类的实例。

           实现方式:

                    1.将类默认的构造方法私有化,让外部不能直接new一个实例。

                        

                    2.在类的内部创建该类的实例,该实例静态私有化。

                       

                    3.提供一个静态的get方法,返回内部静态类的实例。

                        

            当我们需要得到这个类的实例时,直接调用这个类的getOne的静态方法便可得到该类的实例,由于是静态的,所以在类             加载的时候便会创建该类的实例。

 

   二、懒汉模式

        定义:在加载的时候并不会创建该类的实例,而是只有在运行期外部调用该类的时候,才会创建该类的实例。所谓懒汉                        模式,表明它很懒,你不用,我就不会创建,只有在你需要用时,我才会创建。

       

        实现方式:

                1.默认的构造方法私有化,和饿汉模式的第一步一样的。

                  

                2.私有化一个该类修饰的成员变量,但是并不会去创建该类的实例。

                    

                3.提供一个公共的get方法,在方法里面,首先判断成员变量是不是为空,如果为空,则去new 一个实例,如果不为                      空,则直接放回。作用,防止创建多个实例。

                   

       

  三、懒汉模式和懒汉模式的异同

          相同:     

                1.在一个应用程序中都是只能创建类的一个实例。

                2.都是将构造方法私有化,在类的内部创建类的实例。

          不同:

                1.饿汉模式是在类加载时创建实例,而懒汉模式是在运行期需要要调用该类的实例时才创建。

                2.由于第一点,所以饿汉模式在类加载的时候比较慢,懒汉模式在运行时比较慢。

                3.饿汉模式是属于线程安全的。懒汉模式线程不安全。因为在多线程情况下,有可能存在多个线程同时 

                   去创建类的实列,所以在多线程情况下最后使用饿汉模式

 

四、枚举类创建单列(推荐使用)

优点: 线程安全,延迟加载,序列化与反序列化安全,反射安全。

package com.test;

public enum Three {
	INSTANCE;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public static void main(String[] args) {
		Three three=Three.INSTANCE;
		three.setName("aa");
		System.out.println(three.getName());
	}
	
}

 

   五、应用场景

                 1.javaweb项目中的application,session便属于单例模式,目的便是全局共享一个实例,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值