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 MapobjectMap = new HashMap ();18 19 /**20 * 获得一个对象的实例21 * 22 * @param cls23 * @return24 */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:1username:abcpassword:aaa
如有问题,大家来我的网站进行提问。
版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。