JAVA设计模式之【单例模式】

简介:

422101-20160929071720360-245154359.png

任务管理器案例

1.单例类

package Singleton;

/**
 * Created by Jim on 2016/9/28.
 */
public class TaskManager {
    private static TaskManager tm = null;
    private TaskManager() {
        System.out.println("创建任务管理器");
    }

    public void displayProcesses() {
        System.out.println("显示进程");
    }

    public void displayServices() {
        System.out.println("显示服务");
    }

    public static TaskManager getInstance() {
        if (tm == null) {
            tm = new TaskManager();
        }
        return tm;
    }

}

2.客户端

package Singleton;

public class Client
{
    public static void main(String args[])
    {
         try
         {
             TaskManager tm = TaskManager.getInstance();
             tm.displayProcesses();
             tm.displayServices();

             TaskManager tm2 = TaskManager.getInstance();
             tm2.displayProcesses();
             tm2.displayServices();
         }
         catch(Exception e)
         {
            System.out.println(e.getMessage());
         }
    }
}

身份证办理案例

1.单例类

package Singleton;

/**
 * Created by e550 on 2016/9/29.
 */
public class IdentityCardNo {
    private static IdentityCardNo instance=null;
    private String no;

    private IdentityCardNo()
    {
    }

    public static IdentityCardNo getInstance()
    {
        if(instance==null)
        {
            System.out.println("第一次办理身份证,分配新号码!");
            instance=new IdentityCardNo();
            instance.setIdentityCardNo("No400011112222");
        }
        else
        {
            System.out.println("重复办理身份证,获取旧号码!");
        }
        return instance;
    }

    private void setIdentityCardNo(String no)
    {
        this.no=no;
    }

    public String getIdentityCardNo()
    {
        return this.no;
    }
}

2.客户端类

package Singleton;

public class Client
{
    public static void main(String args[])
    {
         try
         {
             IdentityCardNo no1,no2;
             no1=IdentityCardNo.getInstance();
             no2=IdentityCardNo.getInstance();
             System.out.println("身份证号码是否一致:" + (no1==no2));

             String str1,str2;
             str1=no1.getIdentityCardNo();
             str2=no1.getIdentityCardNo();
             System.out.println("第一次号码:" + str1);
             System.out.println("第二次号码:" + str2);
             System.out.println("内容是否相等:" + str1.equalsIgnoreCase(str2));
             System.out.println("是否是相同对象:" + (str1==str2));

         }
         catch(Exception e)
         {
            System.out.println(e.getMessage());
         }
    }
}

执行结果:

第一次办理身份证,分配新号码!
重复办理身份证,获取旧号码!
身份证号码是否一致:true
第一次号码:No400011112222
第二次号码:No400011112222
内容是否相等:true
是否是相同对象:true

打印池

1.打印池类

package SpoolerSingleton;

public class PrintSpoolerSingleton
{
    private static PrintSpoolerSingleton instance=null; // 打印池

    private PrintSpoolerSingleton()
    {
    }

    public static PrintSpoolerSingleton getInstance() throws PrintSpoolerException
    {
        if(instance==null)
        {
            System.out.println("创建打印池!");
            instance=new PrintSpoolerSingleton();
        }
        else
        {
            throw new PrintSpoolerException("打印池正在工作中!");
        }
        return instance;
    }

    public void manageJobs()
    {
        System.out.println("管理打印任务!");
    }
}

2.异常辅助类

package SpoolerSingleton;

public class PrintSpoolerException extends Exception
{
    public PrintSpoolerException(String message)
    {
        super(message);
    }
}

3.客户端类

package SpoolerSingleton;

public class Client
{
    public static void main(String a[])
    {
        PrintSpoolerSingleton ps1,ps2;
        try
        {
            ps1=PrintSpoolerSingleton.getInstance();
            ps1.manageJobs();
        }
        catch(PrintSpoolerException e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println("--------------------------");
        try
        {
            ps2=PrintSpoolerSingleton.getInstance();
            ps2.manageJobs();
        }
        catch(PrintSpoolerException e)
        {
            System.out.println(e.getMessage());
        }
    }
}

执行结果:

创建打印池!
管理打印任务!
--------------------------
打印池正在工作中!




本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5918556.html,如需转载请自行联系原作者

相关文章
|
10天前
|
设计模式 安全 Java
Java设计模式之单例模式详解
Java设计模式之单例模式详解
|
3天前
|
设计模式 缓存 安全
【Java设计模式 - 创建型模式1】单例模式
【Java设计模式 - 创建型模式1】单例模式
4 0
|
2月前
|
设计模式 Java
Java设计模式【一】:单例模式
Java设计模式【一】:单例模式
33 0
|
2月前
|
设计模式 安全 Java
Java设计模式之单例模式
在软件工程中,单例模式是一种常用的设计模式,其核心目标是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。Java作为一门广泛使用的编程语言,实现单例模式是面试和实际开发中的常见需求。
72 9
Java设计模式之单例模式
|
12月前
|
设计模式 SpringCloudAlibaba 安全
Java设计模式(二):单例模式
**单例设计模式**(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式
109 0
|
11月前
|
设计模式 缓存 安全
单例模式【Java设计模式】
单例模式【Java设计模式】
41 0
|
12月前
|
设计模式 Java Windows
Java设计模式 —— 单例模式
Java设计模式 —— 单例模式
|
设计模式 安全 Java
Java设计模式_单例模式
Java设计模式_单例模式
|
设计模式 安全 Java
Java设计模式—单例模式
Java设计模式—单例模式
69 0
|
设计模式 存储 安全
<Java设计模式>(三)单例模式
<Java设计模式>(三)单例模式
<Java设计模式>(三)单例模式