单例模式详解

单例模式详解:

      单例顾名思义就是单个实例(即一个类只会生成唯一的一个对象)实例是怎样创建的呢?当然是调用构造器来创建对象的,但是外部类(比如测试类)每次创建都会生成一个对象,所以就只能将构造器用private修饰,这样就不会在外部类中随心所欲的产生多个对象了,内部类就能控制实例的数目,但是又产生了个问题,怎么创建对象?这个问题好解决,我们可以在内部类中定义一个可以提供一个实例的方法,但是又有问题出现了,既然构造器用private修饰,外部类不能生成对象,怎么调用内部类的方法?这个问题是个关键,既然不能用创建对象来解决,但是可以选择静态方法,静态方法可以用类名直接调用,这样就能得到单个实例;

 

单例示例一:

package com.zp.pattern.singleton;

public class SingletonPattern {
	
	//创建一个实例对象,由于静态方法中只能调用静态变量,所以得定义成static;
	private static SingletonPattern singleton = new SingletonPattern();
	
	//定义成private防止外部类创建多个实例;
	private SingletonPattern(){
		
	}
	
	//由于构造方法定义成private类型,所以外部类只能通过静态方法调用内部类创建的实例;
	public static SingletonPattern getInstance(){
		return singleton;
	}
}

 

package com.zp.pattern.singleton;

public class Test {
	public static void main(String[] args) {
		
		SingletonPattern singleton = SingletonPattern.getInstance();
		SingletonPattern singleton2 = SingletonPattern.getInstance();
		System.out.println(singleton == singleton2);
	}
}

    结果:true

 

单例示例二:(不适用于多线程)

package com.zp.pattern.singleton;

public class SingletonPattern {
	
	//创建一个对象引用,由于静态方法中只能调用静态变量,所以得定义成static;
	private static SingletonPattern singleton;
	
	//定义成private防止外部类创建多个实例;
	private SingletonPattern(){
		
	}
	
	//由于构造方法定义成private类型,所以外部类只能通过静态方法调用内部类创建的实例;
	public static SingletonPattern getInstance(){
		
		if(singleton == null){
			singleton = new SingletonPattern();
		}
		return singleton;
	}
}

 

package com.zp.pattern.singleton;

public class Test {
	public static void main(String[] args) {
		
		SingletonPattern singleton = SingletonPattern.getInstance();
		SingletonPattern singleton2 = SingletonPattern.getInstance();
		System.out.println(singleton == singleton2);
	}
}

    结果:true

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值