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,如需转载请自行联系原作者

相关文章
|
9小时前
|
设计模式 安全 Java
从零开始:Java开发者的设计模式指南
从零开始:Java开发者的设计模式指南
|
1天前
|
设计模式 Java 数据安全/隐私保护
Java中的设计模式:从入门到精通
Java中的设计模式:从入门到精通
|
2天前
|
设计模式 消息中间件 负载均衡
实现可扩展和可靠的分布式系统的Java设计模式
实现可扩展和可靠的分布式系统的Java设计模式
|
2天前
|
设计模式 Java 开发者
Java中设计模式的应用与实现详解
Java中设计模式的应用与实现详解
|
2天前
|
设计模式 监控 Java
Java中容错和恢复能力的设计模式
Java中容错和恢复能力的设计模式
|
2天前
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用
|
2天前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
3天前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 单例模式
js设计模式【详解】—— 单例模式
6 1
|
3天前
|
设计模式 安全 Java
从零开始:Java开发者的设计模式指南
从零开始:Java开发者的设计模式指南
|
4天前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式