博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之【单例模式】
阅读量:7048 次
发布时间:2019-06-28

本文共 4081 字,大约阅读时间需要 13 分钟。

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

你可能感兴趣的文章
org.dom4j.DocumentException:对实体 "virtual_card_id" 的引用必须以 ';' 分隔符结尾
查看>>
【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
查看>>
linux内核剖析(七)Linux进程间通信的几种方式总结
查看>>
180510.最近踩过和听过的sql的坑
查看>>
api 25 PopupWindow会占据整个屏幕
查看>>
Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
查看>>
Android GreenDao操作外部DB数据库文件
查看>>
spring 邮件服务
查看>>
饿了么多活利器:实时双向复制工具(DRC)
查看>>
SpringBoot各类扩展点详解
查看>>
NancyFx-打造小型 WebAPI 與 Microservice 的輕巧利器
查看>>
为什么使用Reazor
查看>>
使用intellij idea打包并部署到外部的tomcat
查看>>
jz2440存储管理实验【学习笔记】
查看>>
SQL Server 关于列的权限控制
查看>>
springboot - Constructor、@Autowired、@PostConstruct分析
查看>>
InnoDB recovery过程解析
查看>>
WPF 中动态创建和删除控件
查看>>
springboot+mysql实现quartz集群搭建
查看>>
docker 构建 https 私有仓库 Registry
查看>>