Java学习不走弯路教程(12 Container容器)
Posted java123-vip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习不走弯路教程(12 Container容器)相关的知识,希望对你有一定的参考价值。
Container容器
一. 前言
在前上一章教程中,介绍了单例模式。
本章将在上一章的基础上,进一步扩展程序。
注:
1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题。
2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓。
学习本章需要准备的知识:
1.读完本系列教程的前面章节。
二. 步入正题
话不多说,大家自己理解,下面步入正题:
单例模式虽然能满足我们的需求,但这种非业务的代码侵入了每一个业务类。
如下图所示:
本章我们来做一个容器,让容器负责类的创建。
由于容器只有一个,所以我们把容器做成单例模式。
使用方式如下:
// 创建一个容器 MyContainer container = MyContainer.getInstance(); // 根据类型返回对应的实例 PersonService personService = (PersonService)container.getObject(PersonService.class);
容器代码如下:
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class MyContainer { 7 8 private static MyContainer instance = new MyContainer(); 9 10 private MyContainer() {} 11 12 public static MyContainer getInstance() { 13 return instance; 14 } 15 16 // 保存已经生成的对象 17 private Map<String,Object> objectMap = new HashMap<String,Object>(); 18 19 /** 20 * 获得一个对象的实例 21 * 22 * @param cls 23 * @return 24 */ 25 public Object getObject(Class cls) { 26 27 String classFullName = cls.getName(); 28 29 Object obj = objectMap.get(classFullName); 30 31 // 如果第一次创建,则生成新的实例并保存,否则返回已生成的实例。 32 if(obj == null) { 33 34 try { 35 obj = cls.newInstance(); 36 objectMap.put(classFullName, obj); 37 return obj; 38 } catch (InstantiationException e) { 39 e.printStackTrace(); 40 } catch (IllegalAccessException e) { 41 e.printStackTrace(); 42 } 43 44 return null; 45 }else { 46 return obj; 47 } 48 49 } 50 }
于是程序变成这样的写法:
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class PersonService { 7 8 public Person getPerson(String personid) { 9 MyContainer container = MyContainer.getInstance(); 10 PersonDao personDao = (PersonDao)container.getObject(PersonDao.class); 11 12 Person person = personDao.getPersonById(personid); 13 14 return person; 15 } 16 }
/** * * @author http://www.java123.vip * */ public class PersonDao { public void savePerson(Person person) { ......略 } public Person getPersonById(String id) { ......略 } }
三. 测试
测试代码如下:
1 /** 2 * 3 * @author http://www.java123.vip 4 * 5 */ 6 public class PersonServiceTest { 7 8 public static void main(String[] args) { 9 10 MyContainer container = MyContainer.getInstance(); 11 PersonService personService = (PersonService)container.getObject(PersonService.class); 12 13 Person personResult = personService.getPerson("1"); 14 15 System.out.println("id:"+personResult.id); 16 System.out.println("username:"+personResult.username); 17 System.out.println("password:"+personResult.passwd); 18 } 19 }
程序输出如下:
id:1
username:abc
password:aaa
完整程序请大家从[这里]下载
如有问题,大家来我的网站进行提问。
https://www.java123.vip/qa
版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。
以上是关于Java学习不走弯路教程(12 Container容器)的主要内容,如果未能解决你的问题,请参考以下文章