工場を実装しようとしています。私が理解しているように、次の単純なコードはファクトリ(C#)です
private void methodName()
{
var result = GetTypeByName("nameOfType")
}
private AbstractClassName GetTypeByName(string nameOfType)
{
switch(nameOfType)
{
case "type1":
return new inheritedFromAbstractClass();
case "type2":
return new alsoInheritedFromAbstractClass();
default:
throw new Exception();
}
}
残念ながら、VS2005を使用した.NET 2.0プロジェクトで立ち往生しているため、「var」キーワードを使用できません。このようなことがどのように行われたか、または.NET 2.0でどのように行われるかについて、誰かにアドバイスをいただけますか。
したがって、より現実的な例:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting order");
Console.WriteLine("Press 1 or 2");
string s = Console.ReadLine();
var order = GetOrderByIdFromFactory(s);
order.ShippingAddress = "My House, England";
Console.WriteLine(order.Ship());
Console.ReadKey();
}
private static OrderShipment GetOrderByIdFromFactory(string s)
{
OrderShipment os = default(OrderShipment);
switch (s)
{
case "1":
return new FedExShipping();
break;
case"2":
return new UpsShipping();
break;
default:
throw new NotImplementedException("Not implemented");
}
}
}
私の抽象基本クラス
public abstract class OrderShipment
{
#region Properties
public string ShippingAddress { get; set; }
internal string Label { get; set; }
private readonly TextWriter _text = new StringWriter();
#endregion
#region Public Methods
internal string Ship ()
{
VerifyShippingData();
GetShippingLabelFromCarrier();
PrintLabel();
return _text.ToString();
}
internal virtual void VerifyShippingData()
{
if (string.IsNullOrEmpty(ShippingAddress))
{
throw new ApplicationException("Invalid Address");
}
}
internal abstract void GetShippingLabelFromCarrier();
internal virtual void PrintLabel()
{
_text.Write(Label);
}
#endregion
}
そして私の2つの継承クラス
public class FedExShipping : OrderShipment
{
internal override void GetShippingLabelFromCarrier()
{
//ToDo perform logic
Label = "FedEx Label Details";
}
}
public class UpsShipping : OrderShipment
{
internal override void GetShippingLabelFromCarrier()
{
//ToDo logic
Label = "Ups Label Details";
}
}