JAVA基础之设计模式

设计模式:对问题行之有效的解决方式。其实是一种思想。


1.单例设计模式
解决的问题:就是可以保证一个类在内存中的对象唯一性。
(即一个类只创建一个对象,多个程序调用时不创建对象,只是引用。)
比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

如何保证对象唯一性呢?
1.不允许其他程序用new创建该类对象。
2.在该类创建一个实例。
3.对外提供一个方法让其他程序可以获取该对象。
上面话的意思就是,为了保证只创建一个对象,其他程序使用该对象只能是调用,不能创建新对象。
应该做的方法就是保证其他程序不能创建对象,而自己本身创建一个并私有,且提供方法供其他程序使用。

步骤:
1.私有化该类的构造函数。(构造函数用于创建对象时初始化,一旦私有了构造函数,其他程序就无法创建新对象)
2.通过new在本类中创建一个本类对象。
3.定义一个公有的方法,将创建的对象返回。


示例:

class Single
{
	public static void main(String[] args) 
	{
	/*我们在主函数调用Single对象。我们知道调用时有两种方法
		一种是对象调用,但是这里我们不能创建对象,就无法调用。
		另一种就是类名调用,在这里我们只能使用这种方法。
		但是类名调用有个前提,只能是静态的,所以我们调用的公有方法也只能是静态的。*/
		Single ss=Single.getInstance();
		Single s2=Single.getInstance();
		//上面两条语句都是在用类名调用Single中所创建的对象,只是调用后重新命名,其实使用的是一个对象。
		System.out.println(ss==s2);
		//我们判断ss和s2调用的是否是同一个对象,即他们的地址值是否是同一个,结果是true。
		System.out.println("----------");
		SingleTest s1=SingleTest.getInstance();
		SingleTest s3=SingleTest.getInstance();
		s1.setNum(30);
		s3.setNum(8);
		System.out.println(s1.getNum());
		System.out.println(s3.getNum());

	}
}

class Single
{
	private static Single s=new Single();//这是在类中创建一个该类对象。该对象名为s。
	//静态函数访问的内容必须是静态的,所以我们给s前加上修饰符,让他转为静态。
	//static Single s里的Single是引用数据类型。
	//私有该对象是为了避免其他程序在调用时,直接调用s,随意更改。
	//为了保证该对象的可控,所以我们私有该对象,只提供函数调用方法。
	private Single(){} //这是私有化本类构造函数。
	public static  Single getInstance()//提供外部使用的公有函数(方法)。
	{//我们用类名调用这个函数,这个函数就必须是静态的。
		return s;
	}
}
//实际应用
class SingleTest
{
	private int num;
	private static SingleTest St=new SingleTest();
	private SingleTest(){}
	public static	SingleTest getInstance()
	{
		return St;
	}
	public void setNum(int home)
	{
		num=home;//如果两个变量名相同,那么this关键词必须写。
	}
	public int getNum()
	{
		return num;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值