[Deisgn Pattern] 樣板方法(Template Method)

[Deisgn Pattern] 樣板方法(Template Method)

程式開發上常常都會使用到繼承,但既然要用到繼承,我們就要想辦法讓所有可能重覆固定的部份儘量抽到父類別去,讓子類去實作不同的地方即可;或是我們可以讓父類別去定義執行的步驟,但由子類別去決定執行的內容。舉例來說:寄信的方法都一樣,但是內容會不同。

 

image

所以先建立一個寄信處理的父類別:

 


public abstract class MailSender
{
    private string _receiver;
    private string _title;
    protected string _body;

    public MailSender(string title, string receiver)
    {
        _title = title;
        _receiver = receiver;
    }

    public abstract void MakeMailBody();

    public bool Send()
    {
        this.MakeMailBody();
        bool isSend = false;

        //...寄信處理

        return isSend;
    }
}

 

繼承的子類別:只需要實作信件內容即可。

 


public class NotifyMailSender : MailSender
{
    public NotifyMailSender(string title, string receiver):base(title, receiver)
    {

    }

    public override void MakeMailBody()
    {
        this._body = "這是一封通知信";
    }
}

public class ErrorMailSender : MailSender
{
	public ErrorMailSender(string title, string receiver):base(title, receiver)
	{

	}
	public override void MakeMailBody()
	{
		this._body = "這是一封警告信";
	}
}

 

這樣子不管你想要寄什麼信~都可以直接切換:


MailSender sender = new NotifyMailSender("notify", "admin@admin.com");
sender.Send();

sender = new ErrorMailSender("error", "admin@admin.com");
sender.Send();

 

Dotblogs 的標籤: ,