Java学习不走弯路教程(11 单例模式2(单实例类))

单例模式2(单实例类)

一. 前言

在前上一章教程中,介绍了静态方法的伪单例模式。
本章将在上一章的基础上,进一步扩展程序。

注:
1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题。
2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓。

学习本章需要准备的知识:
1.读完本系列教程的前面章节。
2.理解单例模式。

二. 步入正题
话不多说,大家自己理解,下面步入正题:

静态方法虽然能满足我们的需求,但他牺牲了面向对象对程序带来的扩展性,比如AOP等。
本章我们讨论对单实例类的处理。

首先我们要保证对该类的创建只能通过一个入口来进行,即不能通过new方式来创建类,否则无法控制实例的数量。
我们把构造函数私有化,这样,在该类以外就不能用new方式来创建实例。

然后做一个getInstance的静态方法来作为创建实例的入口,即通过类名.getInstance来生成实例。

然后做一个静态类变量,在类第一次被加载的时候就生成唯一的实例,以后每次调用getInstance就返回该实例。

代码如下:

/**
 *
 * @author http://www.java123.vip
 *
 */
public class PersonDao {

    private static PersonDao instance = new PersonDao();

    private PersonDao() {}

    public static PersonDao getInstance() {
        return instance;
    }

    public void savePerson(Person person) {
......略
    }

    public Person getPersonById(String id) {
......略
    }

}
 1 /**
 2  *
 3  * @author http://www.java123.vip
 4  *
 5  */
 6 public class PersonService {
 7
 8     private static PersonService instance = new PersonService();
 9
10     private PersonService() {}
11
12     public static PersonService getInstance() {
13         return instance;
14     }
15
16     public Person getPerson(String personid) {
17
18         PersonDao personDao = PersonDao.getInstance();
19
20         Person person = personDao.getPersonById(personid);
21
22         return person;
23     }
24 }

三. 测试
测试代码如下:

 1 /**
 2  *
 3  * @author http://www.java123.vip
 4  *
 5  */
 6 public class PersonServiceTest {
 7
 8     public static void main(String[] args) {
 9
10         PersonService personService = PersonService.getInstance();
11
12         Person personResult = personService.getPerson("1");
13
14         System.out.println("id:"+personResult.id);
15         System.out.println("username:"+personResult.username);
16         System.out.println("password:"+personResult.passwd);
17     }
18 }

程序输出如下:

id:1
username:abc
password:aaa

完整程序请大家从[这里]下载

如有问题,大家来我的网站进行提问。
https://www.java123.vip/qa

版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。

原文地址:https://www.cnblogs.com/java123-vip/p/9768082.html

时间: 2024-08-11 05:31:16

Java学习不走弯路教程(11 单例模式2(单实例类))的相关文章

Java学习不走弯路教程(3.从文件内容查询开始)

从文件查询开始 一. 前言在前两章教程中,分别介绍了DOS环境搭建和Eclipse环境搭建.本章将带大家实现用简单SQL语句查询文件.注:1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题.2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓. 二. 写给初学Java的同学在介绍本章内容之前,首先介绍一下Java的学习方法.相信大家在看本文的时候已经已经拿到了各种Java学习路径,大体都是一样.我想说的是,不要让知识的学习成为负担,Java技术种类繁多,是无论

Java学习不走弯路教程(14 代码结构整理)

代码结构整理 一. 前言 在前上一章教程中,介绍了和浏览器的通讯.本章将在上一章的基础上,进一步扩展程序. 注:1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题.2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓. 学习本章需要准备的知识:1.读完本系列教程的前面章节.二. 步入正题 话不多说,大家自己理解,下面步入正题: 为了在后面的课程中走的更远,我们来整理一下代码的结构. 首先我们把业务逻辑都放在app包下,并且将这个包分为三层,web,servic

Java学习不走弯路教程(1.DOS环境搭建)

DOS环境搭建在开始写第一个Java程序之前,我们需要做一些简单的准备工作. 1.1 还记得DOS吗我们可以通过图形界面来操作我们的电脑.但作为程序员,你首先需要学会用命令行的方式来操作电脑,因为不是所有的电脑都提供图形界面的.Windows环境下可以通过DOS来执行命令.你只需要记住大概5个命令,即可完成电脑的基本操作. 我们首先启动DOS环境:在文件浏览器的地址栏中输入cmd,回车,如下图所示. 光标左边显示的是当前所在目录.本教程实例均在C盘下操作,所以如果不是C盘,输入c:回车,切换到C

Java开发手册 Java学习手册教程(MtJava开发手册)

本文档的版权归MtJava文档小组所有,本文档及其描述的内容受有关法律的版权保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致相应的法律责任. MtJava只是一个学习Java的简化版本,适合有一些Java基础的人学习参考,主要是为了辅助MtAndroid的学习者学习的文档 Java开发手册 Java学习手册教程(MtJava开发手册),布布扣,bubuko.com

Java学习-009-文件名称及路径获取实例及源代码

此文源码主要为应用 Java 获取文件名称及文件目录的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-3 00:02:27,请知悉. Java获取文件名称的源代码如下: 1 /** 2 * @function 获取文件名 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java getfname, 201

Java学习笔记_18_字符串、包装类、原始数据类剪得转换

18. 字符串.包装类.原始数据类剪得转换: 各个转换如下: 1>String 转换成Integer: Integer integer = new Integer("string");或 Integer Integer = Integer.valueOf(String): 注:String必须是数字字符串,如:"1232". 2>Integer 转换成String: String str = Integer.toString(); 3>Intege

【java学习】Servlet简单的表单程序(一)

此文用于java学习,在此小记. 在此小Demo中使用到了Servlet,所以有必要了解一下Servlet的相关知识.(Servlet的相关知识摘抄自http://blog.csdn.net/jiuqiyuliang/article/details/36424981) Servlet是Sun公司提供的一门用于开发动态web网页的技术.Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可

C++单例模式与单例类模板

1.单例模式 (1)需求的提出:在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single,Instance) (2)问题:如何定义一个类,使得这个类最多只能创建一个对象? 要控制类的对象数目,必须对外隐藏构造函数 思路: @1:将构造函数的访问属性设置为private,将拷贝构造函数,赋值操作符都声明成private的,防止对象的赋值操作,因为这个类的对象只能有一个. @2:定义instance并初始化为NULL.在类中用static type* instance的方式声明一

java Vamei快速教程11 对象引用

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前一直在使用“对象”这个概念,但没有探讨对象在内存中的具体存储方式.这方面的讨论将引出“对象引用”(object reference)这一重要概念. 对象引用 我们沿用之前定义的Human类,并有一个Test类: public class Test { public static void main(String[] args) { Human aPerson = new