zoukankan      html  css  js  c++  java
  • 设计模式之单例(单态)模式(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

  • 相关阅读:
    sharepoint 2013 configure my site
    格式化xml
    斗罗大陆
    spring的beans.xml的配置
    jdom学习:读取xml文件
    java中加载xml文件方法
    struts2中IOC控制反转应用
    struts2.xml的配置与技巧
    struts2中的路径问题
    struts.xml详细配置
  • 原文地址:https://www.cnblogs.com/vokie/p/3602077.html
Copyright © 2011-2022 走看看