• 设计模式之单例(单态)模式(Singleton)


    单例模式主要是为了确保在程序运行期,有且只有一个实例对象。整个程序共享这个唯一的单例对象。

    在程序的使用中,这种设计模式很常见。这里我就写一个我曾经学习时用到的案例:唯一的月亮。

    设计这个月亮类的时候,我们需要注意以下几个点

    1)私有构造方法 (防止外部可以用new来创建月亮类的实例)

    2)私有静态类实例

    3)公共方法getInstance,该公共方法为静态方法。

    然后思路清晰,上代码:

    package demo;
    
    public class Moon {
    	private static Moon moon;
    	//月有阴晴圆缺的状态
    	public String state;
    	private Moon() {
    		state="circle";
    	}
    
    	public static Moon getInstance() {
    		if(moon==null)
    			moon = new Moon();
    		return moon;
    	}
    	
    	public String getState(){
    		return state;
    	}
    	
    	public void setState(String st){
    		state = st;
    	}
    }
    


    测试Main类:

    package demo;
    
    public class Main {
    	public static void main(String[] args) {
    		Moon m1 =Moon.getInstance();
    		
    		System.out.println(m1.getState());
    		
    		Moon.getInstance().setState("half");
    		
    		System.out.println(m1.getState());
    	}
    }
    


    运行结果:

    circle
    half
    


    单例模式又分为三种,常见又分为懒汉,饿汉,登记时单例。

    我上面的方式就是典型的懒汉,程序每次调用时都要检查Moon是否存在,不存在的情况下才创建。相对来说节省了空间,但是却浪费了时间。

    饿汉,程序运行的时候就创建Moon实例,在getInstance的时候就直接返回实例,不需要查询实例是否存在,相对来说节省了时间,但是却浪费了空间,饿汉的Moon代码如下:

    package demo;
    
    public class Moon {
    	private static Moon moon = new Moon();
    	// 月有阴晴圆缺的状态
    	public String state;
    
    	private Moon() {
    		state = "circle";
    	}
    
    	public static Moon getInstance() {
    		return moon;
    	}
    
    	public String getState() {
    		return state;
    	}
    
    	public void setState(String st) {
    		state = st;
    	}
    }
    


    登记时单例,利用到了Java的反射机制以及Map,通过键值来获取想要的单例。

    深入学习的话,参考一下链接:

    http://shuidexiongdi.iteye.com/blog/1208099

    本项目下载连接:http://www.kuaipan.cn/file/id_132802506211221415.htm?source=1

  • 相关阅读:
    14 DOM案例
    13 client&offset&scroll
    12 DOM操作节点&定时器
    脚下的路
    甘于寂寞
    为创意埋单,为知识产权埋单,为精细化服务埋单
    在那东山顶上
    你们都以落第为耻,我却以落第动心为耻
    决定经常性更新博客
    怎样以最快的速度导入mysql
  • 原文地址:https://www.cnblogs.com/vokie/p/3602077.html
Copyright © 2020-2023  润新知