Deskripsi logis:
Sekarang kami ingin menambahkan lapisan antarmuka ke lapisan B dan lapisan D dan menggunakan pabrik. Dan kita dapat menganggap pembuatan B dan pembuatan D sebagai dua rangkaian, lalu kita dapat menggunakan pabrik abstrak untuk membuatnya.
File konfigurasi: beans-config.xml. kelas layanan dan kelas dao masing-masing berhubungan dengan dua seri produk. Id di submenu sesuai dengan namespace antarmuka, dan kelas sesuai dengan namespace kelas implementasi.
Copy kode kodenya sebagai berikut:
[html] lihat salinan cetak biasa?
<?xml versi="1.0" pengkodean="UTF-8"?>
<kacang>
<kelas layanan>
<service id="com.xxjstgb.drp.baseddata.manager.ItemManager" />
<service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />
</kelas layanan>
<kelas dao>
<dao id="com.xxjstgb.drp.baseddata.dao.ItemDao" />
<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />
</kelas-dao>
</kacang>
Pabrik abstrak : BeanFactory. Dengan membaca file konfigurasi, dapatkan objek yang relevan dan simpan objek terkait yang dibuat di Peta.
Copy kode kodenya sebagai berikut:
[java] lihat salinan cetak biasa?
paket com.xxjstgb.drp.util;
impor java.util.HashMap;
import java.util.Map;
//dom4j
impor org.dom4j.Dokumen;
import org.dom4j.DocumentException;
impor org.dom4j.Element;
impor org.dom4j.io.SAXReader;
impor com.xxjstgb.drp.basedata.dao.ItemDao;
impor com.xxjstgb.drp.basedata.manager.ItemManager;
impor com.xxjstgb.drp.flowcard.dao.FlowCardDao;
impor com.xxjstgb.drp.flowcard.manager.FlowCardManager;
/**
* Pabrik abstrak, terutama menciptakan dua rangkaian produk
* 1. Seri manajer
* 2. Produk seri Dao
* @penulis liuzhengquan
*
*/
kelas publik BeanFactory {
instance BeanFactory statis pribadi=new BeanFactory();
//Nama file konfigurasi default sistem
string akhir pribadi beansConfigFile="beans-config.xml";
//Simpan objek terkait Dao
dokumen Dokumen pribadi;
/*
* key=nilai id dalam file konfigurasi
* value=objek yang sesuai dengan Id
*/
private Map serviceMap = new HashMap();//Simpan objek terkait Layanan
private Map daoMap = new HashMap();//Simpan objek terkait Dao
Pabrik Kacang pribadi(){
mencoba {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} tangkapan (DocumentException e) {
e.printStackTrace();
lempar RuntimeException();
}
}
getInstance BeanFactory statis publik(){
contoh kembali;
}
/**
* Mendapatkan produk seri Layanan sesuai nomor produk
* @param serviceId
* @kembali
*/
Objek getServiceObject yang disinkronkan publik (Kelas c){
//Jika ada instance objek terkait, kembalikan
if(serviceMap.containsKey(c.getName())){
kembalikan serviceMap.get(c.getName());
}
Elemen beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
String className=beanElt.attributeValue("kelas");
Layanan objek=null;
mencoba {
layanan=Kelas.untukNama(namakelas).newInstance();
//Masukkan objek yang dibuat ke dalam Peta
serviceMap.put(c.getName(), layanan);
} tangkapan (Pengecualian e) {
lempar RuntimeException();
}
layanan pengembalian;
}
/**
* Dapatkan produk seri Dao sesuai nomor produk
* @param daoId
* @kembali
*/
Objek tersinkronisasi publik getDaoObject(Kelas c){
//Jika ada instance objek terkait, kembalikan
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Elemen beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
String className=beanElt.attributeValue("kelas");
Objek dao=null;
mencoba {
dao=Kelas.untukNama(namakelas).newInstance();
//Masukkan objek yang dibuat ke dalam Peta
daoMap.put(c.getName(), dao);
} tangkapan (Pengecualian e) {
lempar RuntimeException();
}
kembali dao;
}
/**
* tes
* @param argumen
*/
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=FlowCardManagerImpl();
Sistem.keluar.println(flowCardManager);
FlowCardDao flowCardDao=(FlowCardDao)BeanFactory.getInstance().getDaoObject(FlowCardDao.class);
//FlowCardDao flowCardDao=FlowCardDaoImpl();
System.out.println("flowCardDao:"+flowCardDao);
}
}