博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习不走弯路教程(12 Container容器)
阅读量:4877 次
发布时间:2019-06-11

本文共 3027 字,大约阅读时间需要 10 分钟。

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
objectMap = 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所有,禁止任何形式的转载与引用。

转载于:https://www.cnblogs.com/java123-vip/p/9768095.html

你可能感兴趣的文章
问题 B: 习题6-5 数组元素逆置
查看>>
Xenomai 3 migration
查看>>
windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
查看>>
Android应用资源---绘制资源类型(Drawable)(四)
查看>>
bzoj 2155 Xor
查看>>
git 设定全局ignore
查看>>
Rails5 layout 和 template
查看>>
Codeforces Round #460 Div. 2 C.D
查看>>
CodeForces 1110H. Modest Substrings
查看>>
同构伪代码彻底理解using 指令
查看>>
落没的十句经典
查看>>
LIST对象排序问题
查看>>
树总结之并查集趣解
查看>>
Don't repeat yourself
查看>>
wpa_supplicant移植与使用(转)
查看>>
iOS开源项目:AFNetworking----写得非常好
查看>>
jq变态全选vs原生变态全选
查看>>
delphi 设置开机自动启动函数
查看>>
CodeForces - 366C Dima and Salad (01背包)
查看>>
关于Linux一些问题和答案
查看>>