Java學習不走彎路教程(12 Container容器)
阿新 • • 發佈:2018-10-16
user () sys src con public 根據 基礎上 access
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容器)