Description logique :
Nous voulons maintenant ajouter des couches d'interface aux couches B et D et utiliser des usines. Et nous pouvons considérer la création de B et la création de D comme deux séries, et ensuite nous pouvons utiliser l’usine abstraite pour les créer.
Fichier de configuration : beans-config.xml. la classe service et la classe dao correspondent respectivement à deux séries de produits. L'identifiant dans le sous-menu correspond à l'espace de noms de l'interface et la classe correspond à l'espace de noms de la classe d'implémentation.
Copiez le code comme suit :
[html] voir plaincopyprint ?
<?xml version="1.0" encoding="UTF-8"?>
<haricots>
<classe de service>
<service id="com.xxjstgb.drp.basedata.manager.ItemManager" />
<service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />
</classe-service>
<classe dao>
<dao id="com.xxjstgb.drp.basedata.dao.ItemDao" />
<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />
</classe-dao>
</haricots>
Fabrique abstraite : BeanFactory. En lisant le fichier de configuration, obtenez les objets pertinents et enregistrez les objets créés associés dans la carte.
Copiez le code comme suit :
[Java] voir plaincopyprint ?
paquet com.xxjstgb.drp.util ;
importer java.util.HashMap ;
importer java.util.Map ;
//dom4j
importer org.dom4j.Document ;
importer org.dom4j.DocumentException ;
importer org.dom4j.Element ;
importer org.dom4j.io.SAXReader ;
importer com.xxjstgb.drp.basedata.dao.ItemDao ;
importer com.xxjstgb.drp.basedata.manager.ItemManager ;
importer com.xxjstgb.drp.flowcard.dao.FlowCardDao ;
importer com.xxjstgb.drp.flowcard.manager.FlowCardManager ;
/**
* Usine abstraite, crée principalement deux séries de produits
* 1. Série Manager
* 2. Produits de la série Dao
* @auteur Liuzhengquan
*
*/
classe publique BeanFactory {
instance BeanFactory statique privée = new BeanFactory ();
//Nom du fichier de configuration par défaut du système
chaîne finale privée beansConfigFile="beans-config.xml";
//Enregistrer les objets liés à Dao
Document privé ;
/*
* key=valeur id dans le fichier de configuration
* value=l'objet correspondant à l'Id
*/
private Map serviceMap = new HashMap();//Enregistrer les objets liés au service
private Map daoMap = new HashMap();//Enregistrer les objets liés à Dao
BeanFactory privé(){
essayer {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} catch (DocumentException e) {
e.printStackTrace();
lancer une nouvelle RuntimeException();
}
}
public statique BeanFactory getInstance(){
instance de retour ;
}
/**
* Obtenez les produits de la série Service en fonction du numéro de produit
* @param serviceId
* @retour
*/
Objet synchronisé public getServiceObject (Classe c) {
// S'il existe une instance d'objet associée, renvoie
if(serviceMap.containsKey(c.getName())){
return serviceMap.get(c.getName());
}
Élément beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
String className=beanElt.attributeValue("class");
Service d'objet=null ;
essayer {
service=Class.forName(className).newInstance();
//Mettez l'objet créé dans la carte
serviceMap.put(c.getName(), service);
} attraper (Exception e) {
lancer une nouvelle RuntimeException();
}
service de retour ;
}
/**
* Obtenez les produits de la série Dao en fonction du numéro de produit
* @param daoId
* @retour
*/
Objet synchronisé public getDaoObject (Classe c) {
// S'il existe une instance d'objet associée, renvoie
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Élément beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
String className=beanElt.attributeValue("class");
Objet dao=null ;
essayer {
dao=Class.forName(className).newInstance();
//Mettez l'objet créé dans la carte
daoMap.put(c.getName(), dao);
} attraper (Exception e) {
lancer une nouvelle RuntimeException();
}
retourner dao;
}
/**
* test
* @param arguments
*/
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);
}
}