目錄
一、簡單工廠模式
二、簡單工廠模式角色
三、普通**例項
四、配置檔案+反射
五、uml圖
從字面意思看來就是要有乙個工廠類,那麼這個工廠類是幹什麼的呢? 建立並返回乙個具體物件。
應用場景如下:
假如我們要做乙個計算器,它有很多個功能。加減乘除取餘乘方等,利用簡單工廠模式,我們要設計乙個計算類operation,這個類裡面包含什麼成員和方法呢?
關於抽象類,有以下幾點需要注意:
抽象類不可例項化,也就是不會直接去使用它,而是通過子類的繼承間接使用。
抽象方法必須被子類重寫,這裡的getresult函式要被子類重寫。包含抽象方法的類要定義為抽象類。
這個抽象類的**如下:
package design;
public abstract class operation
public void setnuma(double numa)
public double getnumb()
public void setnumb(double numb)
public abstract double getresult();// 公共屬性
}
有了這個抽象類,我們要設計加減乘除子類,子類繼承這個抽象類並重寫getresult方法。**如下:
package design;
public class operationadd extends operation
}
package design;
public class operationsub extends operation
}
package design;
public class operationmul extends operation
}
package design;
public class operationdiv extends operation catch (exception e)
return result;
}}
有了這四個運運算元類,就很方便了,假如以後要增加運算,只用新增別的運算類並繼承抽象類就好了。
下面是工廠類,工廠類需要注意兩點:
**如下:
package design;
public class operationfactory
return ope;
}}
建立完這個工廠類之後,我們就可以進行客戶端的建立了,這裡我們再新增乙個測試類。
package design;
public class mainone catch(exception e)}}
通過這個測試類,我們可以物件創立並測試**。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace ******factory
get
}public double numb
get
}public abstract double getresult();// 公共屬性}}
各種操作類和上面相同,不再寫出。
using system;
using system.collections.generic;
using system.configuration;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace ******factory
catch (exception e)}}
}
這裡利用配置檔案+反射實現,去掉了switch語句,實現了解耦。加上反射,就很完美了呀。
這裡的反射要新增引用,在system下。然後是注意要用英文,中文會出現很多問題。
uml圖如下:(很不專業的畫法)
工廠模式實現解耦
1.首先建立乙個業務類service,在service中有乙個屬性dao,daoimpl是實現了dao介面的類 public class serviceimpl public inte ce dao 2.在建立乙個測試類 public class testmethod 3.我們發現這樣雖然完成業務但...
工廠模式解耦 dom4j解析xml
我們當前的開發末實現,service層對dao層有依賴,例如在userservcieimp 現了 private productdao dao new productdaoimpl 假如我們做了乙個產品oa,但是我們沒有辦法確定客戶採用什麼樣的資料庫,此時我們需要 需要為當前專案開發不同的資料庫的版...
為什麼工廠模式可以解耦?下篇
上節我已經基本說明了耦合,以及在一些業務上是怎麼發生的,實際上我們要理解乙個思想,傳統的ejb開發模式,因為受到了很多很多的框架硬性約束,web容器的約束 導致了 的可讀性,可移植和可擴充套件性變得不好,所以有這些解耦的思想,我們才會在03年spring的廣泛流行!回顧上節末尾 我們是不是遺留了乙個...