设计模式浅谈--单例模式

下面简要地说说单例设计模式构造方法私有化,更深入的研究与运行将在以后开一篇文章详细讲解


类的封装性不止体现在对属性的封装上,方法也是可以封装的,在方法封装中也包含了对构造方法的封装.例如:

class Person{
	private Person(){}//封装构造方法
	public void print(){
		System.out.println("Hello world!");
	}
}
如果想对这个类进行操作,必须实例化对象,但是现在构造方法私有化了,如果我们正常用new进行实例化,则肯定会出现错误.封装意味着对外界不可见,就是说我们在外部不能调用它的构造方法,既然外部不能,那么内部么?

class Person{
	Person person = new Person();//在内部实例化对象
	private Person(){}
	public void print(){
		System.out.println("Hello world!");
	}
}
现在的问题是,我们如何把内部产生的person对象传递到类的外部去?

就要用到static关键字了,因为static声明的属性或者方法可以用类名称直接调用!

class Person{
	static Person person = new Person();
	private Person(){}
	public void print(){
		System.out.println("Hello world!");
	}
}

public class Test{
	public static void main(String []args){
		Person p= Person.person;//访问类中的静态属性
		p.print();
	}
}
可是这样做仍然有个小问题,类中的属性必须封装,外部不能直接调用.所以完善为这样:

class Person{
	static Person person = new Person();
	private Person(){}
	public static Person getPerson(){//因为需要类名直接调用,所以必须是类方法!
		return person;
	}
	public void print(){
		System.out.println("Hello world!");
	}
}

public class Test{
	public static void main(String []args){
		Person p= Person.getPerson();//调用类方法
		p.print();
	}
}
至此,上述程序是个完善的构造方法私有化的demo.


下面我们来看一看这段程序:

class Person{
	static Person person = new Person();
	private Person(){}
	public static Person getPerson(){//因为需要类名直接调用,所以必须是类方法!
		return person;
	}
	public void print(){
		System.out.println("Hello world!");
	}
}

public class Test{
	public static void main(String []args){
		Person p1= Person.getPerson();//调用类方法
		Person p2= Person.getPerson();//调用类方法
		Person p3= Person.getPerson();//调用类方法
		p1.print();
		p2.print();
		p3.print();
	}
}
这个程序有什么意义呢?

--->以上程序中可以发现,虽然声明了3个Person的对象,但是实际上只是对person对象的引用,也就是说,不管外面对p1,p2,p3这三个对象如何使用,实际上也只有一个实例化对象person存在.如图:


这种设计模式就称之为单例模式

无论程序怎样运行,Person类永远只有一个实例化对象存在.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值