Sample Factory,
先透過Abstract 做出模型架構, 再加以實作
uml圖片
例如:
賣杯子,很多種的杯子,但杯子有分高級品和低等品
先建立杯子的基本模型
public abstract class Cap
{
public CapClass create(string position)
{
CapClass p = createPayList(position);
return p;
}
protected abstract CapClass createPayList(string position);
}
再建立杯子本身有哪些價格和變數
public abstract class CapClass
{
protected double poormoney;
protected double goodmoney;
protected double cost;
public abstract double sell();
public abstract double hismoney();
public abstract double costall();
public void printMoneyall()
{
Console.WriteLine("原價: {0}",sell());
Console.WriteLine("打折: {0}",hismoney());
Console.WriteLine("趴數: {0}",costall());
}
}
當模型都建立好了之後, 再分別設定高級杯、普通杯和低價杯的價格
//高級杯
public class TaiwanHighClass :CapClass
{
public TaiwanHighClass()
{
poormoney = 1000;
goodmoney = 900;
cost = 0.9;
}
public override double sell()
{
return (poormoney + goodmoney);
}
public override double hismoney()
{
return ((poormoney+goodmoney) * 0.9);
}
public override double costall()
{
return cost;
}
}
//低價杯
public class TaiwanLowClass : CapClass
{
public TaiwanLowClass()
{
poormoney = 100;
goodmoney = 100;
cost = 0.9;
}
public override double sell()
{
return (poormoney + goodmoney);
}
public override double hismoney()
{
return ((poormoney + goodmoney) * 0.9);
}
public override double costall()
{
return cost;
}
}
//普通杯
public class TaiwanNormalClass : CapClass
{
public TaiwanNormalClass()
{
poormoney = 500;
goodmoney = 400;
cost = 0.9;
}
public override double sell()
{
return (poormoney + goodmoney);
}
public override double hismoney()
{
return ((poormoney + goodmoney) * 0.9);
}
public override double costall()
{
return cost;
}
}
當價格的原型都設定好了之後, 再將原本的[工廠]作實體化, 如此就可以透過你所寫入的變數來分別傳回不同的物件並輸入
public class GlassHighCap : Cap
{
protected override CapClass createPayList(string position)
{
switch (position)
{
case "高級杯":
return new TaiwanHighClass();
case "低級杯":
return new TaiwanLowClass();
default:
return new TaiwanNormalClass();
}
}
}
//最後是結果的列印
class Program
{
static void Main(string[] args)
{
Cap twHICap = new GlassHighCap();
Console.WriteLine("高級杯");
CapClass twA = twHICap.create("高級杯");
twA.printMoneyall();
Console.WriteLine("普通杯");
CapClass twTeamLeader = twHICap.create("普通杯");
twTeamLeader.printMoneyall();
Console.WriteLine("低級杯");
CapClass twEmployee = twHICap.create("低級杯");
twEmployee.printMoneyall();
Console.ReadLine();
}
}
參考網站:
史帝芬心得筆記 : http://my.so-net.net.tw/idealist/Patterns/
留言列表