空對象模式取代簡單的 NULL 值判斷,將空值檢查作為一種不做任何事情的行為。 介紹 在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。 類圖描述 代碼實現 1、定義抽象類 2、定義實體類 ...
空對象模式取代簡單的 NULL 值判斷,將空值檢查作為一種不做任何事情的行為。
介紹
在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。
類圖描述
代碼實現
1、定義抽象類
public abstract class AbstractCustomer
{
protected string Name;
public abstract bool IsNil();
public abstract string GetName();
}
2、定義實體類
public class NullCustomer : AbstractCustomer
{
public override string GetName()
{
return "Not Available in Customer Database";
}
public override bool IsNil()
{
return true;
}
}
public class RealCustomer : AbstractCustomer
{
public RealCustomer(string name)
{
Name = name;
}
public override string GetName()
{
return this.Name;
}
public override bool IsNil()
{
return false;
}
}
3、定義工廠類
public class CustomerFactory
{
public static readonly string[] names = { "Rob", "Joe", "Julie" };
public static AbstractCustomer GetCustomer(string name)
{
for (int i = 0; i < names.Length; i++)
{
if (names[i] == name)
return new RealCustomer(names[i]);
}
return new NullCustomer();
}
}
4、上層調用
class Program
{
static void Main(string[] args)
{
AbstractCustomer customer1 = CustomerFactory.GetCustomer("Rob");
AbstractCustomer customer2 = CustomerFactory.GetCustomer("Bob");
AbstractCustomer customer3 = CustomerFactory.GetCustomer("Julie");
AbstractCustomer customer4 = CustomerFactory.GetCustomer("Laura");
Console.WriteLine("Customers");
Console.WriteLine(customer1.GetName());
Console.WriteLine(customer2.GetName());
Console.WriteLine(customer3.GetName());
Console.WriteLine(customer4.GetName());
Console.ReadKey();
}
}