Logische Beschreibung:
Jetzt wollen wir Schnittstellenschichten zu Schicht B und Schicht D hinzufügen und Fabriken verwenden. Und wir können die Erstellung von B und die Erstellung von D als zwei Serien betrachten und dann die abstrakte Fabrik verwenden, um sie zu erstellen.
Konfigurationsdatei: Beans-config.xml. Service-Klasse und Dao-Klasse entsprechen jeweils zwei Produktserien. Die ID im Untermenü entspricht dem Namensraum der Schnittstelle und die Klasse entspricht dem Namensraum der Implementierungsklasse.
Kopieren Sie den Codecode wie folgt:
[html] plaincopyprint anzeigen?
<?xml version="1.0"kodierung="UTF-8"?>
<Bohnen>
<Dienstklasse>
<service id="com.xxjstgb.drp.basedata.manager.ItemManager" />
<service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />
</service-class>
<dao-klasse>
<dao id="com.xxjstgb.drp.basedata.dao.ItemDao" />
<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />
</dao-class>
</beans>
Abstrakte Fabrik : BeanFactory. Rufen Sie durch Lesen der Konfigurationsdatei die relevanten Objekte ab und speichern Sie die zugehörigen erstellten Objekte in der Karte.
Kopieren Sie den Codecode wie folgt:
[Java] Plaincopyprint anzeigen?
Paket com.xxjstgb.drp.util;
import java.util.HashMap;
java.util.Map importieren;
//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;
/**
* Die abstrakte Fabrik stellt hauptsächlich zwei Produktserien her
* 1. Manager-Serie
* 2. Produkte der Dao-Serie
* @Autor Liuzhengquan
*
*/
öffentliche Klasse BeanFactory {
private static BeanFactory-Instanz=new BeanFactory();
//Name der Standardkonfigurationsdatei des Systems
private final String BeansConfigFile="beans-config.xml";
//Dao-bezogene Objekte speichern
privates Dokumentdokument;
/*
* Schlüssel=ID-Wert in der Konfigurationsdatei
* Wert=das Objekt, das der Id entspricht
*/
private Map serviceMap = new HashMap(); // Dienstbezogene Objekte speichern
private Map daoMap = new HashMap(); // Dao-bezogene Objekte speichern
private BeanFactory(){
versuchen {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} Catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException();
}
}
öffentliche statische BeanFactory getInstance(){
Rückgabeinstanz;
}
/**
* Erhalten Sie Produkte der Service-Serie entsprechend der Produktnummer
* @param serviceId
* @zurückkehren
*/
öffentliches synchronisiertes Objekt getServiceObject(Klasse c){
//Wenn es eine zugehörige Objektinstanz gibt, kehre zurück
if(serviceMap.containsKey(c.getName())){
return serviceMap.get(c.getName());
}
Element beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
String className=beanElt.attributeValue("class");
Objektdienst=null;
versuchen {
service=Class.forName(className).newInstance();
//Füge das erstellte Objekt in die Map ein
serviceMap.put(c.getName(), service);
} Catch (Ausnahme e) {
throw new RuntimeException();
}
Rückholservice;
}
/**
* Erhalten Sie Produkte der Dao-Serie entsprechend der Produktnummer
* @param daoId
* @zurückkehren
*/
öffentliches synchronisiertes Objekt getDaoObject(Klasse c){
//Wenn es eine zugehörige Objektinstanz gibt, kehre zurück
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Element beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
String className=beanElt.attributeValue("class");
Objekt dao=null;
versuchen {
dao=Class.forName(className).newInstance();
//Füge das erstellte Objekt in die Map ein
daoMap.put(c.getName(), dao);
} Catch (Ausnahme e) {
throw new RuntimeException();
}
Rückkehr dao;
}
/**
* prüfen
* @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);
FlowCardManager flowCardManager=(FlowCardManager)BeanFactory.getInstance().getServiceObject(FlowCardManager.class);
//FlowCardManager flowCardManager=new FlowCardManagerImpl();
System.out.println(flowCardManager);
FlowCardDao flowCardDao=(FlowCardDao)BeanFactory.getInstance().getDaoObject(FlowCardDao.class);
//FlowCardDao flowCardDao=new FlowCardDaoImpl();
System.out.println("flowCardDao:"+flowCardDao);
}
}