抽象工厂模式(C#)
生活随笔
收集整理的這篇文章主要介紹了
抽象工厂模式(C#)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不理解抽象工廠模式是無法徹底明白 Petshop 的,聽起來好像名詞比較多,不好理解...其實就像一層窗戶紙一樣!
有兩點需要注意一下:
1. 必須明白接口的概念及使用方法
2. IFruit MyFruit = (IFruit)Assembly.Load(path).CreateInstance(sTypeName);
??? 這一句包含的內容比較多,但是理解了其實也沒什么的;
??? 首先是使用接口聲明對象,Assembly 是反射方式加載對象,path 為應用程序的“程序集名稱”,sTypeName 為完整的類名
??? 比方說下面的代碼中,程序集的名稱在項目屬性中指定(我這里使用的和命名空間名稱一樣),而完整類名就更好理解了!
使用方法:
Code????protected?void?Button1_Click(object?sender,?EventArgs?e)
????{
????????Label?lb?=?new?Label();
????????string?FruitName?=?TextBox1.Text.Trim();
????????this.form1.Controls.Add(lb);
????????//聲明工廠對象
????????FruitFactory?MyFruitFactory?=?new?FruitFactory();
????????//以接口方式聲明對象(可以實例化為此接口的任何一個對象)
????????IFruit?MyFruit?=?MyFruitFactory.MakeFruit(FruitName);
????????//調用對象內的方法
????????lb.Text?=?MyFruit.PostName();
????}
?
工廠定義如下:
Codeusing?System.Reflection;
namespace?vopt.DAL
{
????///?<summary>
????///?抽象接口定義
????///?</summary>
????public?interface?IFruit
????{
????????string?PostName();//返回類名
????}
????///?<summary>
????///?實例類型一
????///?</summary>
????public?class?Orange?:?IFruit
????{
????????public?string?PostName()
????????{
????????????return?this.ToString();//返回類名
????????}
????}
????///?<summary>
????///?實例類型二
????///?</summary>
????public?class?Apple?:?IFruit
????{
????????public?string?PostName()
????????{
????????????return?this.ToString();//返回類名
????????}
????}
????///?<summary>
????///?抽象工廠定義
????///?</summary>
????public?class?FruitFactory
????{
????????public?IFruit?MakeFruit(string?className)
????????{
????????????//程序集名稱
????????????string?path?=?"vopt.DAL";
????????????//完整的類名,vopt.DAL.Apple/Orange
????????????string?sTypeName?=?path?+?"."?+?className;
????????????//利用反射加載對象
????????????IFruit?MyFruit?=?(IFruit)Assembly.Load(path).CreateInstance(sTypeName);
????????????return?MyFruit;
????????}
????}
}
轉載于:https://www.cnblogs.com/jarod99/archive/2009/01/20/1378935.html
總結
以上是生活随笔為你收集整理的抽象工厂模式(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xml web service
- 下一篇: 枚举类型(C# 编程指南)