Simple Factoryパターン
* GoFではないけど、Factoryパターンの基礎になるらしいので...
サンプル
Dater.cs
* DateTime型と表示するためのstring型をもつ基本クラスpublic class Dater
{
protected DateTime date;
protected string dateString;
public Dater(string date)
{
this.date = DateTime.Parse(date);
}
public DateTime GetDate()
{
return this.date;
}
public string GetDateString()
{
return this.dateString;
}
}
DateFactory.cs
* 入力条件によって、和暦用クラスか西暦用クラスかを返す* 利用者側は、特に意識する必要はない
public class DateFactory
{
public Dater Create(string date)
{
if (date.Trim().StartsWith("H") ||
date.Trim().StartsWith("h"))
{
return new JapaneseEra(date);
}
else
{
return new AnnoDomini(date);
}
}
}
AnnoDomini.cs
* 基本クラスを継承した西暦用クラスpublic class AnnoDomini : Dater
{
public AnnoDomini(string date)
: base(date)
{
this.dateString = this.date.ToString("yyyy/MM/dd");
}
}
JapaneseEra.cs
* 基本クラスを継承した和暦用クラスpublic class JapaneseEra : Dater
{
public JapaneseEra(string date)
: base(date)
{
CultureInfo culture = new CultureInfo("ja-JP", true);
culture.DateTimeFormat.Calendar = new JapaneseCalendar();
this.dateString = this.date.ToString("ggyy年M月d日", culture);
}
}
Fotm1.cs
* 作成したクラスを使用し、ラベルに表示private void button1_Click(object sender, EventArgs e)
{
DateFactory dateFactory = new DateFactory();
Dater dater = dateFactory.Create(this.textBox1.Text);
this.label1.Text = dater.GetDateString();
}
出力例
H21.11.23平成21年11月23日h21/1/23
平成21年1月23日2001/1/23
2001/01/23