論理的な説明:
ここで、インターフェイス層を層 B と層 D に追加し、ファクトリを使用したいと思います。そして、B の作成と D の作成を 2 つのシリーズとみなして、それらを作成するために抽象ファクトリーを使用できます。
設定ファイル:beans-config.xml。 service-class と dao-class は、それぞれ 2 つの製品シリーズに対応します。サブメニューの ID はインターフェイスの名前空間に対応し、クラスは実装クラスの名前空間に対応します。
次のようにコードをコピーします。
[html] plaincopyprint を表示しますか?
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<豆>
<サービスクラス>
<サービスid="com.xxjstgb.drp.baseddata.manager.ItemManager" />
<サービスid="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />
</サービスクラス>
<daoクラス>
<dao id="com.xxjstgb.drp.basedata.dao.ItemDao" />
<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />
</dao-クラス>
</豆>
抽象ファクトリー: 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.baseddata.manager.ItemManager をインポートします。
com.xxjstgb.drp.flowcard.dao.FlowCardDao をインポートします。
com.xxjstgb.drp.flowcard.manager.FlowCardManager をインポートします。
/**
* 抽象工場、主に 2 つのシリーズの製品を作成します。
※1.マネージャーシリーズ
※2.Daoシリーズ製品
* @著者liuzhengquan
*
*/
パブリック クラス BeanFactory {
プライベート静的 BeanFactory インスタンス = new BeanFactory();
//システムのデフォルト設定ファイル名
private Final String beansConfigFile="beans-config.xml";
//Dao関連オブジェクトを保存
プライベートドキュメントドキュメント。
/*
* 設定ファイル内の key=id 値
* value=ID に対応するオブジェクト
*/
private Map serviceMap = new HashMap();//サービス関連オブジェクトを保存
private Map daoMap = new HashMap();//Dao 関連オブジェクトを保存
プライベート BeanFactory(){
試す {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} catch (DocumentException e) {
e.printStackTrace();
新しい RuntimeException() をスローします。
}
}
パブリック静的 BeanFactory getInstance(){
インスタンスを返します。
}
/**
※サービスシリーズ製品は品番に応じて入手してください
* @param サービス ID
* @戻る
*/
パブリック同期オブジェクト getServiceObject(Class c){
//関連するオブジェクトインスタンスがある場合はリターン
if(serviceMap.containsKey(c.getName())){
return serviceMap.get(c.getName());
}
要素 beanElt=(Element)doc.selectSingleNode("//service[@id=/""+ c.getName() + "/"]");
文字列クラス名=beanElt.attributeValue("クラス");
オブジェクトサービス=null;
試す {
サービス=クラス.forName(クラス名).newInstance();
//作成したオブジェクトをMapに配置します
serviceMap.put(c.getName(), サービス);
} catch (例外 e) {
新しい RuntimeException() をスローします。
}
返品サービス;
}
/**
※Daoシリーズ製品は品番に応じて入手してください
* @param daoId
* @戻る
*/
パブリック同期オブジェクト getDaoObject(Class c){
//関連するオブジェクトインスタンスがある場合はリターン
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
要素 beanElt=(Element)doc.selectSingleNode("//dao[@id=/""+c.getName()+"/"]");
文字列クラス名=beanElt.attributeValue("クラス");
オブジェクト dao=null;
試す {
dao=クラス.forName(クラス名).newInstance();
//作成したオブジェクトをMapに配置します
daoMap.put(c.getName(), dao);
} catch (例外 e) {
新しい 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=new FlowCardDaoImpl();
System.out.println("flowCardDao:"+flowCardDao);
}
}