Java学习不走弯路教程(11 单例模式2(单实例类))
Posted java123-vip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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所有,禁止任何形式的转载与引用。
以上是关于Java学习不走弯路教程(11 单例模式2(单实例类))的主要内容,如果未能解决你的问题,请参考以下文章