專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。簡單工廠模式又稱為靜態工廠方法模式,屬于類的創建型模式,通常它根據自變量的不同返回不同的類的實例。
示例:電子付款系統
using System;
namespace EFT
{
//抽象電子付款類
abstract class EFT
{
public abstract void process();
}
//具體子類,虛擬檢查
class VirtualCheck:EFT
{
public override void process()
{
Console.WriteLine("虛擬支票處理中");
}
}
//具體子類,萬事達卡
class MasterCard:EFT
{
public override void process()
{
Console.WriteLine("萬事達卡處理中");
}
}
//簡單工廠類
class EFTFactory
{
public EFT createEFT(string type)
{
switch (type.ToLower())
{
case "virtualcheck":
return new VirtualCheck();
case "mastercard":
return new MasterCard();
default:
return null;
}
}
}
//客戶應用測試
class Client
{
[STAThread]
static void Main(string[] args)
{
EFT eft;
EFTFactory eftFactory = new EFTFactory();
eft = eftFactory.createEFT("VirtualCheck");
eft.process();
eft = eftFactory.createEFT("mastercard");
eft.process();
Console.ReadLine();
}
}
}
示例:學校登錄系統
using System;
namespace SchoolSystem
{
//Base Class 基類
public class SchoolUser
{
public string FName;
public string LName;
public string UserType;
public void Show()
{
Console.WriteLine("First Name: " + FName + "\n");
Console.WriteLine("Last Name: " + LName + "\n");
Console.WriteLine("User Type: " + UserType + "\n");
}
}
//Derived Classes 派生類,校負責人
public class SchoolPrincipal : SchoolUser
{
public SchoolPrincipal()
{
FName = "David";
LName = "Smith";
UserType = "Principal";
}
}
//派生類,校教師
public class SchoolTeacher : SchoolUser
{
public SchoolTeacher()
{
FName = "Patrecia";
LName = "Terry";
UserType = "Teacher";
}
}
//簡單工廠類
public class SimpleFactory
{
public SchoolUser GetSchoolUser(string user, string password)
{
if (user == "Principal" && password == "Principal")
return new SchoolPrincipal();
if (user == "Teacher" && password == "Teacher")
return new SchoolTeacher();
return null;
}
}
//客戶應用
class Client
{
[STAThread]
static void Main(string[] args)
{
SimpleFactory sf = new SimpleFactory();
SchoolUser su;
su = sf.GetSchoolUser("Principal","Principal");
Console.WriteLine("-------------------校長登錄--------------------\n");
su.Show();
Console.WriteLine("-------------------教師登錄--------------------\n");
su = sf.GetSchoolUser("Teacher","Teacher");
su.Show();
Console.ReadLine();
}
}
}
posted on 2008-10-06 13:49
zhanghaibin 閱讀(340)
評論(0) 編輯 收藏 引用 所屬分類:
學習筆記