الوصف المنطقي:
نريد الآن إضافة طبقات الواجهة إلى الطبقة B والطبقة D واستخدام المصانع. ويمكننا أن نعتبر إنشاء B وإنشاء D بمثابة سلسلتين، ومن ثم يمكننا استخدام المصنع المجرد لإنشائهما.
ملف التكوين: Beans-config.xml. تتوافق فئة الخدمة وفئة dao مع سلسلتين من المنتجات على التوالي. يتوافق المعرف الموجود في القائمة الفرعية مع مساحة اسم الواجهة، وتتوافق الفئة مع مساحة الاسم الخاصة بفئة التنفيذ.
انسخ رمز الكود كما يلي:
[html] عرض نسخة عادية؟
<?xml version="1.0" encoding="UTF-8"?>
<فاصوليا>
<فئة الخدمة>
<معرف الخدمة = "com.xxjstgb.drp.basedata.manager.ItemManager" />
<service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />
</فئة الخدمة>
<فئة داو>
<dao id="com.xxjstgb.drp.basedata.dao.ItemDao" />
<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />
</داو الدرجة>
</فاصوليا>
مصنع الملخص : BeanFactory. من خلال قراءة ملف التكوين، احصل على الكائنات ذات الصلة واحفظ الكائنات التي تم إنشاؤها ذات الصلة في الخريطة.
انسخ رمز الكود كما يلي:
[جافا] عرض نسخة عادية؟
package com.xxjstgb.drp.util;
import java.util.HashMap;
import java.util.Map;
//dom4j
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.xxjstgb.drp.basedata.dao.ItemDao;
import com.xxjstgb.drp.basedata.manager.ItemManager;
import com.xxjstgb.drp.flowcard.dao.FlowCardDao;
import com.xxjstgb.drp.flowcard.manager.FlowCardManager;
/**
* يقوم المصنع المجرد بإنشاء سلسلتين من المنتجات بشكل أساسي
* 1. سلسلة المدير
* 2. منتجات سلسلة داو
* @ المؤلف ليوزينجكوان
*
*/
الطبقة العامة BeanFactory {
مثيل BeanFactory الثابت الخاص = new BeanFactory();
// اسم ملف التكوين الافتراضي للنظام
السلسلة النهائية الخاصة BeanConfigFile = "beans-config.xml"؛
// احفظ الكائنات ذات الصلة بـ Dao
وثيقة وثيقة خاصة؛
/*
* مفتاح = قيمة الهوية في ملف التكوين
* القيمة = الكائن المطابق للمعرف
*/
Private Map ServiceMap = new HashMap();// حفظ الكائنات ذات الصلة بالخدمة
Private Map daoMap = new HashMap();// احفظ الكائنات ذات الصلة بـ Dao
خاص BeanFactory () {
يحاول {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} قبض على (DocumentException e) {
printStackTrace();
رمي RuntimeException () جديد؛
}
}
public BeanFactory getInstance(){
مثيل الإرجاع؛
}
/**
* الحصول على منتجات سلسلة الخدمة حسب رقم المنتج
* @param معرف الخدمة
* @يعود
*/
كائن متزامن عام getServiceObject(Class c){
// إذا كان هناك مثيل كائن ذي صلة، فارجع
إذا(serviceMap.containsKey(c.getName())){
إرجاع الخدمةMap.get(c.getName());
}
Element beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
String className=beanElt.attributeValue("class");
خدمة الكائن = فارغة؛
يحاول {
Service=Class.forName(className).newInstance();
// ضع الكائن الذي تم إنشاؤه في الخريطة
serviceMap.put(c.getName(),service);
} قبض (الاستثناء ه) {
رمي RuntimeException () جديد؛
}
خدمة العودة؛
}
/**
* الحصول على منتجات سلسلة Dao حسب رقم المنتج
* @param daoId
* @يعود
*/
كائن متزامن عام getDaoObject(Class c){
// إذا كان هناك مثيل كائن ذي صلة، فارجع
إذا (daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Element beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
String className=beanElt.attributeValue("class");
Object dao=null;
يحاول {
dao=Class.forName(className).newInstance();
// ضع الكائن الذي تم إنشاؤه في الخريطة
daoMap.put(c.getName(), dao);
} قبض (الاستثناء ه) {
رمي RuntimeException () جديد؛
}
عودة داو؛
}
/**
* امتحان
* @param args
*/
public static void main(String[] args){
ItemManager itemManager=(ItemManager)BeanFactory.getInstance().getServiceObject(ItemManager.class);
System.out.println("itemManager"+itemManager);
ItemDao itemDao=(ItemDao)BeanFactory.getInstance().getDaoObject(ItemDao.class);
System.out.println("itemDao:"+itemDao);
FlowCardManagerflowCardManager=(FlowCardManager)BeanFactory.getInstance().getServiceObject(FlowCardManager.class);
//FlowCardManagerflowCardManager=new FlowCardManagerImpl();
System.out.println(flowCardManager);
FlowCardDaoflowCardDao=(FlowCardDao)BeanFactory.getInstance().getDaoObject(FlowCardDao.class);
//FlowCardDaoflowCardDao=new FlowCardDaoImpl();
System.out.println("flowCardDao:"+flowCardDao);
}
}