テンプレートメソッド
複数のメソッドの流れを抽象化し、メソッドの中身はサブクラスで実装する。
メリット
テンプレートを増やしたいときは、クラスを増やせばいいので、コードがタコ足配線にならなくて良い。
もし、テンプレートメソッドがなかったら、if文で分岐して、、みたいになって行くことだろう。
クラス図
サンプルコード
using System;
namespace templateMethod
{
class Program
{
static void Main(string[] args)
{
CustomerMail mail = new CustomerMail("ティグレ","好きです。");
mail.makeMailtext();
StudentMail mail2 = new StudentMail("アイリさん", "付き合ってください。");
mail2.makeMailtext();
}
}
abstract public class MailCreator
{
internal String name;
internal String text;
public void makeMailtext()
{
Console.WriteLine(this.header() + "\n\n" + this.body() + "\n\n" + this.footer());
}
abstract protected String header();
abstract protected String body();
abstract protected String footer();
}
public class CustomerMail : MailCreator
{
public CustomerMail(String name, String text)
{
this.name = name;
this.text = text;
}
protected override String header()
{
return this.name + '様';
}
protected override String body()
{
return "いつもありがとうございます。\n" + this.text;
}
protected override String footer()
{
return "=======\nティグレ株式会社\n" + "0120-0000-0000\n" + "=====\n";
}
}
public class StudentMail : MailCreator
{
public StudentMail(String name, String text)
{
this.name = name;
this.text = text;
}
protected override String header()
{
return this.name + '殿';
}
protected override String body()
{
return "お元気でしょうか。\n" + this.text;
}
protected override String footer()
{
return "=======\nティグレ株式会社\n" + "0120-0000-0001\n" + "=====\n";
}
}
}
結果
ティグレ様
いつもありがとうございます。
好きです。
=======
ティグレ株式会社
0120-0000-0000
ジャイ子殿
お元気でしょうか。
付き合ってください。
=======
ティグレ株式会社
0120-0000-0001