客人自取咖啡離開,咖啡只有內在狀態 (風味),無環境因素 (外在狀態)。適合純享元模式:每種風味只建立一個物件共享。
using System;
using System.Collections;
public abstract class Order
{
public abstract void Serve();
public abstract string GetFlavor();
}
public class Flavor : Order
{
private string flavor;
public Flavor(string f) => flavor = f;
public override string GetFlavor() => flavor;
public override void Serve() => Console.WriteLine("Serving flavor " + flavor);
}
public class FlavorFactory
{
Hashtable flavors = new Hashtable();
public Order GetOrder(string key)
{
if (!flavors.ContainsKey(key)) flavors.Add(key, new Flavor(key));
return (Order)flavors[key];
}
public int GetTotalFlavorsMade() => flavors.Count;
}
public class Client
{
static FlavorFactory factory = new FlavorFactory();
static int ordersMade = 0;
static void Main()
{
TakeOrder("Black Coffee");
TakeOrder("Capucino");
TakeOrder("Espresso");
TakeOrder("Capucino");
TakeOrder("Espresso");
TakeOrder("Black Coffee");
TakeOrder("Espresso");
TakeOrder("Espresso");
TakeOrder("Black Coffee");
TakeOrder("Capucino");
TakeOrder("Capucino");
TakeOrder("Black Coffee");
Console.WriteLine($"\nTotal Orders: {ordersMade}");
Console.WriteLine($"Total Flavor Objects: {factory.GetTotalFlavorsMade()}");
}
static void TakeOrder(string f)
{
Order o = factory.GetOrder(f);
o.Serve();
ordersMade++;
}
}
Flavor 封裝風味 (內在狀態),Serve() 無參數。FlavorFactory 以 Hashtable 快取,相同鍵值回傳同一實例。Flavor 物件,完美示範享元共享。