java设计模式之——单例模式
java设计模式之——单例模式
1,什么是单例模式?
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
?
2,单例模式适合场景?
??? 单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。
单例模式的用意在于前一段中所关心的。通过单例模式你可以:
?
3,单例模式特点:
?
确保一个类只有一个实例被建立
提供了一个对对象的全局访问指针
在不影响单例类的客户端的情况下允许将来有多个实例。
?
?
4,应用场景举例:
我们举个比较难复制的对象:皇帝
?? 中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该是昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式。
?
先看看类图:
?
然后我们看程序实现,先定义一个皇帝:
package com.yangguangfu.singleton;/** * * @author 阿福(trygf521@126.com)<br> *中国的历史上都是一个朝代一个皇帝,有两个皇帝的话,必然要PK一个皇帝出来 */public class EmperorNew {//定义一个皇帝放在那里,然后给这个皇帝起个名字private static final EmperorNew emperorNew = new EmperorNew();;private EmperorNew(){//世俗和道德的约束你,目的就不让你产生第二个皇帝}public synchronized static EmperorNew getInstance(){return emperorNew;}//皇帝叫什么名字呀public static void emperorInfo(){System.out.println("我是皇帝某某某...阿福");}}?直接new一个对象传递给类的成员变量emperorNew,你要的时候getInstance()直接返回给你,问题解决!欧啦!
?
1 楼 wordedit 2012-04-28 那个静态方法的输出永远一样,根本不能说明当前获得的实例是同一个