開閉原則和依賴倒置原則是物件導向設計的重點,程式設計是一門藝術,大批量的改動,是不好看的做法。
1. 工廠方法模式(不是抽象工廠)是定義乙個用於建立物件的介面,讓子類中實現這個介面的方法中的內容決定例項化那乙個類(new 什麼類)。
2. 抽象工廠模式提供幾個建立類的介面,具體抽象子類利用父類定義的方法建立相關的「產品抽象型別」的一組子類具體實現。
3. 從上圖中可以看出,抽象工廠介面的所有子類實現中中也定義有乙個工廠方法,上圖有些亂,元素命名不是很容易懂,但圖的結構完全正確可以結合**去理解。
4. 上圖中ifactory 是乙個抽象工廠介面,他裡面應該包含所有的產品(所有指abstractproducta下面的所有子類的個數,而不是abstractproduct抽象類的個數)建立的抽象方法。產品抽象和抽象工廠所關注的是乙個橫向乙個縱向
5. 也就是通常是在執行時刻再建立乙個concretefactory類的例項,這個具體的工廠再建立具有特定實現的產品物件,也就是說,為建立不同的產品物件,客戶端應該使用不同的具體工廠。
6. 反射格式 assembly.load(「程式集名稱」).createinstance(「命名空間.類名稱」)
7. 利用反射可以使用字串形式來例項化物件,而一般的情況例項化是寫死在程式中的,將程式由編譯時轉為執行時。
8. 所有在用簡單工廠的地方,都可以考慮用反射技術來去除switch或if ,傑出分支判斷帶來的耦合。
9. 無痴迷,不成功
上圖中的源**
using system;示例2 反射+ 簡單工廠using system.collections.generic;
using system.text;
namespace 抽象工廠模式
}/// ///
抽象工廠
///
abstract class
abstractfactory
/// ///
具體抽象工廠,抽象了訪問sqlserver 方式
///
class
concretefactory1 : abstractfactory
public override abstractproductb createproductb()
}/// ///
access
///
class
concretefactory2 : abstractfactory
public override abstractproductb createproductb()
}/// ///
產品抽象a,user表
///
abstract class
abstractproducta
/// ///
產品抽象b 部門表
///
abstract class
abstractproductb
#region concretefactory1抽象工廠職能 ,比如sql server
//實現 產品抽象a
class
producta1 : abstractproducta
//實現產品抽象b
class
productb1 : abstractproductb
}#endregion
#region concretefactory2抽象工廠職能 ,比如access
class
producta2 : abstractproducta
class
productb2 : abstractproductb
}#endregion
/// ///
客戶端程式
///
class
client
//展示結果
public void run()}}
using system;using system.collections.generic;
using system.text;
using system.reflection;
using system.configuration;
namespace 抽象工廠模式
}#region 實體層
class
user
set
}private string _name;
public string name
set }}
class
department
set
}private string _deptname;
public string deptname
set }}
#endregion
#region 使用者表
inte***ce
iuser
class
sqlserveruser : iuser
public user getuser(int id)
}class
accessuser : iuser
public user getuser(int id)
}#endregion
#region 部門表
inte***ce
idepartment
class
sqlserverdepartment : idepartment
public department getdepartment(int id)
}class
accessdepartment : idepartment
public department getdepartment(int id)
}#endregion
/// ///
簡單工廠反射
///
class
dataaccess
public static idepartment createdepartment()}}
抽象工廠模式 抽象工廠模式
抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...
工廠模式 抽象工廠模式
這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...
工廠模式 抽象工廠模式
子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...