Логическое описание:
Теперь мы хотим добавить слои интерфейса к слоям B и D и использовать фабрики. И мы можем рассматривать создание B и создание D как две серии, а затем использовать абстрактную фабрику для их создания.
Файл конфигурации: beans-config.xml. Класс обслуживания и класс дао соответствуют двум сериям продуктов соответственно. Идентификатор в подменю соответствует пространству имен интерфейса, а класс соответствует пространству имен класса реализации.
Скопируйте код кода следующим образом:
[html] просмотреть обычную копию?
<?xml версия="1.0" кодировка="UTF-8"?>
<бобы>
<класс обслуживания>
<service id="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. Прочитав файл конфигурации, получите соответствующие объекты и сохраните связанные созданные объекты на карте.
Скопируйте код кода следующим образом:
[java] просмотреть PlainCopyprint?
пакет com.xxjstgb.drp.util;
импортировать java.util.HashMap;
импортировать java.util.Map;
//dom4j
импортировать org.dom4j.Document;
импортировать org.dom4j.DocumentException;
импортировать org.dom4j.Element;
импортировать org.dom4j.io.SAXReader;
импортировать com.xxjstgb.drp.basedata.dao.ItemDao;
импортировать com.xxjstgb.drp.basedata.manager.ItemManager;
импортировать com.xxjstgb.drp.flowcard.dao.FlowCardDao;
импортировать com.xxjstgb.drp.flowcard.manager.FlowCardManager;
/**
* Абстрактная фабрика, в основном создает две серии продукции.
* 1. Серия «Менеджер»
* 2. Продукты серии Дао
* @author Лючжэнцюань
*
*/
общественный класс BeanFactory {
частный статический экземпляр BeanFactory = новый BeanFactory();
//Имя файла конфигурации системы по умолчанию
частная окончательная строка beansConfigFile="beans-config.xml";
//Сохраняем объекты, связанные с Дао
личный документ документа;
/*
* значение key=id в файле конфигурации
* значение=объект, соответствующий идентификатору
*/
частная карта serviceMap = new HashMap();//Сохранить объекты, связанные со службой
частная карта daoMap = new HashMap(); // Сохранить объекты, связанные с Dao
частный BeanFactory(){
пытаться {
doc = новый SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} catch (DocumentException e) {
е.printStackTrace();
выбросить новое RuntimeException();
}
}
общественный статический BeanFactory getInstance(){
вернуть экземпляр;
}
/**
* Приобретайте продукты серии Service в соответствии с номером продукта.
* @param идентификатор службы
* @возвращаться
*/
общедоступный синхронизированный объект getServiceObject(Class c){
//Если существует связанный экземпляр объекта, возвращаем
если(serviceMap.containsKey(c.getName())){
вернуть serviceMap.get(c.getName());
}
Элемент beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
String className=beanElt.attributeValue("класс");
Служба объекта = ноль;
пытаться {
сервис = Class.forName(className).newInstance();
//Помещаем созданный объект на карту
serviceMap.put(c.getName(), сервис);
} catch (Исключение е) {
выбросить новое RuntimeException();
}
услуга возврата;
}
/**
* Приобретайте продукты серии Dao по номеру продукта.
* @param daoId
* @возвращаться
*/
общедоступный синхронизированный объект getDaoObject (класс c) {
//Если существует связанный экземпляр объекта, возвращаем
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Элемент beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
String className=beanElt.attributeValue("класс");
Объект дао=ноль;
пытаться {
дао = Class.forName(className).newInstance();
//Помещаем созданный объект на карту
daoMap.put(c.getName(), дао);
} catch (Исключение е) {
выбросить новое RuntimeException();
}
вернуть дао;
}
/**
* тест
* @param аргументы
*/
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=новый FlowCardDaoImpl();
System.out.println("flowCardDao:"+flowCardDao);
}
}