首頁 » 設計模式 » 訪問者(Visitor)

訪問者(Visitor)

作者:

分類:

訪問者(Visitor)

概念

訪問者模式是一種行為型模式,概念是在不影響現有類別的狀況做出衍生的動作,而且不同的訪問者可以做出不同的動作,因此可以達到類別與行為分離的目的。

邏輯上就好比一則新聞事件透過不同媒體的報導可以有不同的描述或甚至解讀方式。而事件的本質是不變的,差別在不同的訪問者會有不同的輸出。

範例

//**************
//* author: cian
//* 20231118
//**************

interface IReportVisitor
{
    void ReportNews(News news);
}

class ABC_News : IReportVisitor
{
    public void ReportNews(News news)
    {
        Console.WriteLine("This is the ABC news report.");
        Console.WriteLine($"{news.Content} at {news.Time}");
    }
}

class CNN_News : IReportVisitor
{
    public void ReportNews(News news)
    {
        Console.WriteLine("This is the Latest News from CNN.");
        Console.WriteLine($"{news.Content}");
        Console.WriteLine($"Time: {news.Time}");
    }
}

abstract class ReporterExpression
{    
    public abstract void Accept(IReportVisitor v);
}

class News : ReporterExpression
{
    public DateTime Time { get; set; }
    public string Content { get; set; }
    
    public override void Accept(IReportVisitor v)
    {
        v.ReportNews(this);
    }
}

class NewsApp
{
    static void Main(string[] args)
    {
        News sportNews = new News()
        {
            Time = DateTime.Now,
            Content = "Lebron James won Most Valuable Player (MVP) Awards."
        }
        
        sportNews.Accept(new ABC_News());
        sportNews.Accept(new CNN_News());
    }
}

結語

以上為學習過程的問題紀錄

如果文章有誤,歡迎前輩留言請不吝指教。

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *