提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

单例模式实现居民身份证

  • 一、问题描述
  • 二、问题分析
    • 1.采用单例模式的原因分析
    • 2.类图
  • 三、两种常用的单例模式对比
    • 1.饿汉式与懒汉式
  • 四、单例模式的优缺点
    • 1.单例模式的优点
    • 2.单例模式的缺点
  • 五、代码及结果

一、问题描述

  在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式模拟该场景,设计类图并编程实现。

二、问题分析

1.采用单例模式的原因分析

  ①身份证号码系统是保证在外部不能进行类的实例化所以类的构造方法是私有的,外部类不能访问。
  ②身份证号码系统是在类内部自行创建该实例,并且在第一次被引用时将自己实例化。
  ③身份证号码系统外部(向整个系统)提供该实例通过一个静态方法,该方法返回一个实例。

2.类图

三、两种常用的单例模式对比

1.饿汉式与懒汉式

  属性和构造方法都是私有的,都有一个向外部提供实例的公有方法。不同点:饿汉式单例模式是在类被初始化时创建类的实例,而懒汉式单例模式的单例类是在第一次被引用是将自己实例化。从资源利用效率看,饿汉式单例模式比懒汉式单例模式好;从速度和应时间看,懒汉式单例模式比饿汉式单例模式好。

四、单例模式的优缺点

1.单例模式的优点

(1)实例控制:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
(2)灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程。

2.单例模式的缺点

(1)开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
(2)可能的开发混淆:使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

五、代码及结果

IdentityCardNo接口:

public class IdentityCardNo {private static IdentityCardNo id = null;private String No;private IdentityCardNo(){}public static IdentityCardNo getInstance(){if (id == null){id = new IdentityCardNo();}return id;}public String getNo() {return No;}public void setNo(String no) {No = no;}
}

测试类:

import javax.swing.*;
public class Test {public static void main(String args[]){IdentityCardNo NO1,NO2;NO1 = IdentityCardNo.getInstance();NO1.setNo("123");System.out.println(NO1.getNo());NO2 = IdentityCardNo.getInstance();NO2.setNo("456");System.out.println(NO1.getNo());System.out.println(NO2.getNo());JOptionPane.showMessageDialog(null,NO1.equals(NO2));}
}

运行结果:

单例模式实现居民身份证相关推荐

  1. 云南实现手机自主补(换)领居民身份证

    图为云南首位通过手机自主补领居民身份证的申领人付宏强. 缪超 摄 中新网昆明1月22日电 (缪超)春节临近,云南实现手机自主补(换)领居民身份证,首张通过手机补办的居民身份证于22日在武定县公安局狮山 ...

  2. 居民身份证号码的奥秘及身份证第18位(校验码)的计算方法

    2019独角兽企业重金招聘Python工程师标准>>> 居民身份证是国家法定的证明公民个人身份的证件.为了堵塞和制止假居民身份证的流通和使用,在查验和核查居民身份证时可掌握以下几个要 ...

  3. 我国大陆居民身份证Java验证

    关于身份证验证这一点做到身份证的编码有效性,只有是否真实存在,就算有国家居民身份证数据库也不见的真的符合事实,毕竟一人多证,或者有人无证的基本现象是存在的. 做项目中有用到用户身份证验证,那么尽最大努 ...

  4. Java:15位或18位居民身份证号码通用校验(正则表达式、日期格式、末尾校验码)

    身份证号码校验,正则表达式校验.日期格式校验.18位身份证末尾校验码校验 前六位省市县号码变更频繁,这里就不做校验 import java.text.ParseException; import ja ...

  5. 【转】则表达式匹配居民身份证

    http://blog.sina.com.cn/s/blog_491997ee0100avd2.html 简单写法 身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或 ...

  6. 正则表达式匹配居民身份证

    大陆的居民身份证号码有两种:18位和15位,15位的身份证号码是老一代身份证号码. 18位和15位的区别在于两个部分:第一,18位号码的年份以4位计而15位号码的年份为2位,如1987年在18位号码中 ...

  7. 案例驱动式Python学习笔记【第三篇】居民身份证信息提取

    驱动案例 居民身份证是每位居民的唯一身份标识,18位的居民身份证号的信息包含省.市.出生日期和性别等信息, 那么本节将介绍如何按需提取相应的信息.居民身份证是每位居民的唯一身份标识,18位的居民身份证 ...

  8. 北京开展居民身份证自助办理试点等3项户政便民新措施

    资料图:市民体验"身份证自助满意拍系统".中新社发 郝群英 摄 图片来源:CNSPHOTO 中新网北京1月30日电 (记者 于立霄)为进一步方便群众.简化办事程序,北京市公安机关3 ...

  9. 第二代居民身份证阅读器GTICR-100(国腾)接口类调用方法

    最近做了一个项目,客户需求要用第二代居民身份证阅读器GTICR-100(国腾)来读取用户的信息.我做的这个项目是C/S开发的(C#  windowsForms),用到的一些参考资料以及这个国腾硬件驱动 ...

最新文章

  1. 图论-欧拉路(UVA10054)(HDU1116)
  2. TX2更新源失败的问题
  3. 开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件
  4. 交换机端口与mac_address的绑定
  5. 优化JVM参数提升Eclipse运行速度
  6. lol最克制诺手的英雄_LOL:哪些英雄之间非常克制,不管怎么打,遇到就输了?...
  7. 以实际产品为例, 进行软件工程训练的作业
  8. 测试低频噪音软件,设计制作并验证0.1Hz10Hz超低频微弱噪音检测放大器要点
  9. sourcetree使用简介
  10. php设计模式总结-单件模式
  11. matlab costas环,MATLAB写COSTAS环的问题。
  12. FFmpeg中AVFrame中width与linesize的关系
  13. haoi2018奇怪的背包题解
  14. 工作流(Workflow)基本介绍
  15. 什么是无线射频识别技术(RFID)
  16. win10 外接触摸屏触摸校准
  17. Android获取设备ID号
  18. Matlab运用mapping包在地图上绘制散点图
  19. 安装实例中出现的ORA-27123和ORA-12532的错误
  20. 羽化 matlab,MATLAB实现图像羽化处理(图像羽化处理)

热门文章

  1. Elastic Beanstalk进阶
  2. 面向对象编程-面试篇
  3. c++源文件 不同后缀(.cc .cpp .C .cp)的区别
  4. 内网与外网 ,广域网与局域网
  5. 管家婆有未记账的凭证怎么办_管家婆录入凭证时没有其他业务收入,结转后出现其他业务收入如何解决 _0...
  6. 算法设计-归并两个非递减有序排列的线性表
  7. omnet++中ticitoc1学习笔记
  8. 买厨房小厨宝(二),再说国美电器
  9. 计算机网络基本概念,计算机网络基本概念【笔记】
  10. 分布式事务中Tcc模式常见问题(幂等、空回滚、空悬挂)解决