java学习第五篇---单例设计模式

虽然进度很慢,但如果能把自己学的每个东西都吃透也算是值得了。加油,加油,加油!

设计模式:解决某一类问题,最行之有效的方法,java中有23中设计模式。

单例设计模式:解决一个类在内存中只存在一个对象的问题。

想要保证对象唯一:
1)为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2)还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
3)为了方便其他程序对自定义对象的访问,可以提供一些访问方式。
代码体现:
1)将所有构造函数私有化,这样可禁止其他程序建立对象
2)在类中创建本来对象

3)提供一个可以获取该对象的方法,又因为该类不能创建对象,要访问类中方法只能采用“类名.方法名”的方式,因此此时方法要设成静态的。又因为静态方法中不能引用非静态变量,所以上面创建对象时也要设成静态的。

class Student
{
	private Student(){}   // 构造函数私有化
	private static Student st = new Student(); // 创建private属性的对象
<span style="white-space:pre">	</span>//可以获取对象的静态方法
	public static Student getInstance() 
	{
		return st;
	}
	private int age;
	public void setAge(int age)
	{
		this.age = age; 
	}
	public int getAge()
	{
		return age;
	}
}

class SingleDemo
{
	public static void main(String[] args)
	{
                //实验确定ss和ss2是指向同一个对象的
		Student ss = Student.getInstance();
		Student ss2 = Student.getInstance();
		ss.setAge(35);
		System.out.println(ss2.getAge());
	}
}
注意:单利设计模式存在饱汉式和饿汉式两种方式,上面介绍的是饿汉式,也是平时最常用的一种方式。饱汉式的设计方式是:

class Single
{
	private static Single s = null;
	private Single(){}
	public static Single getInstance()
	{
		if(s==null){
<span style="white-space:pre">			</span>synchronized(Single.class)
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>if(s==null){
<span style="white-space:pre">					</span>s = new Single():
<span style="white-space:pre">			</span> <span style="white-space:pre">		</span>}
<span style="font-family: Arial, Helvetica, sans-serif;">						</span><span style="font-family: Arial, Helvetica, sans-serif;">}</span>

	<span style="white-space:pre">		</span>}
		return s;
	}
}
这里多了一个对对象是否创建的判断,代码稍显复杂。所以最常用的还是饿汉式。

之前用到过多线程就一直没搞懂这个异步操作,今天算是有一些明白了,简要介绍下synchronized。这其实就是一个锁,被他修饰的代码块只能同时被一个程序访问。即,每个程序执行到synchronized(Single.class)关键字时会先判断,下面是否有程序正在执行代码块内内容,如果有则后面的程序不能进入执行,只能等上一个执行完了才可以进入执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值