中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

發布時間:2020-10-03 17:23:47 來源:腳本之家 閱讀:145 作者:GhostRider 欄目:編程語言

本文實例講述了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題。分享給大家供大家參考,具體如下:

一、理論定義

訪問者模式 提供了 一組 集合 對象 統一的 訪問接口,適合對 一個集合中的對象,進行邏輯操作,使 數據結構  和 邏輯結構分離。

二、應用舉例

需求描述:暑假來啦!三個小伙子組團,開車來 長隆歡樂世界玩。
每個人想玩的項目都不一樣,
旅游者 1   想玩:十環過山車,龍卷風暴,夢幻旋馬
旅游者 2   想玩:空中警察,歡樂摩天輪,超級水戰
旅游者 3   想玩:四維影院,垂直極限,U型滑板
車開到長隆后,就開始各自Enjoy啦!!!

三、具體編碼

1.一個旅游者接口,里面有一個Play游玩 方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  public interface ITourist
  {
    /// <summary>
    /// 游玩
    /// </summary>
    /// <param name="happyWorld">長隆歡樂世界</param>
     void Play(ChangLongHappyWorld happyWorld);
  }
}

2.每個人要玩什么項目,都有一個標志

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class PlayAttribute : Attribute
  {
    private string _PlayItem;
    /// <summary>
    /// 游玩的項目
    /// </summary>
    public string PlayItem
    {
      get { return _PlayItem; }
      set { _PlayItem = value; }
    }
  }
}

3.長隆歡樂世界

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  /// 長隆歡樂世界
  /// </summary>
  public class ChangLongHappyWorld
  {
    /// <summary>
    /// 接待各個訪問者
    /// </summary>
    /// <param name="visitor"></param>
    public void visit(ITourist visitor) {
      //每個旅游者想玩的項目不一樣。使用反射,方便調用
      MethodInfo[] method = visitor.GetType().GetMethods();
      foreach (MethodInfo m in method) {
        object[] property= m.GetCustomAttributes(false);
        string customerAttribute = null;
        if (property.Length>0) {
          customerAttribute = property[0].ToString();
        }
        if (customerAttribute == "Com.Design.Gof.Visitor.PlayAttribute")
        {
          m.Invoke(visitor, new object[] { });
        }
      }
    }
  }
}

4.旅游者  1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  /// 旅游者 1  想玩:十環過山車,龍卷風暴,夢幻旋馬
  /// </summary>
  public class TouristOne : ITourist
  {
    /// <summary>
    /// 十環過山車
    /// </summary>
    [PlayAttribute(PlayItem = "TenthRingRollerCoaster")]
    public void Play_TenthRingRollerCoaster() {
      Console.WriteLine("我是游客1,我現在玩的是:十環過山車");
    }
    /// <summary>
    /// 龍卷風暴
    /// </summary>
     [PlayAttribute(PlayItem = "TornadoStorm")]
    public void Play_TornadoStorm()
    {
      Console.WriteLine("我是游客1,我現在玩的是:龍卷風暴");
    }
    /// <summary>
    /// 夢幻旋馬
    /// </summary>
    [PlayAttribute(PlayItem = "DreamHorse")]
    public void Play_DreamHorse()
    {
      Console.WriteLine("我是游客1,我現在玩的是:夢幻旋馬");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

5.旅游者 2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  /// 旅游者 2  想玩:空中警察,歡樂摩天輪,超級水戰
  /// </summary>
  public class TouristTwo : ITourist
  {
    /// <summary>
    /// 空中警察
    /// </summary>
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_AirPolice() {
      Console.WriteLine("我是游客2,我現在玩的是:空中警察");
    }
    /// <summary>
    /// 歡樂摩天輪
    /// </summary>
    [PlayAttribute(PlayItem = "FerrisWheel")]
    public void Play_FerrisWheel()
    {
      Console.WriteLine("我是游客2,我現在玩的是:歡樂摩天輪");
    }
    /// <summary>
    /// 超級水戰
    /// </summary>
    [PlayAttribute(PlayItem = "SuperWater")]
    public void Play_SuperWater()
    {
      Console.WriteLine("我是游客2,我現在玩的是:超級水戰");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

6.旅游者 3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Visitor
{
  /// <summary>
  /// 旅游者 3  想玩:四維影院,垂直極限,U型滑板
  /// </summary>
  public class TouristThree : ITourist
  {
    /// <summary>
    /// 四維影院
    /// </summary>
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_Cinema4D() {
      Console.WriteLine("我是游客3,我現在玩的是:四維影院");
    }
    /// <summary>
    /// 垂直極限
    /// </summary>
    [PlayAttribute(PlayItem = "VerticalLimit")]
    public void Play_VerticalLimit()
    {
      Console.WriteLine("我是游客3,我現在玩的是:垂直極限");
    }
    /// <summary>
    /// U型滑板
    /// </summary>
    [PlayAttribute(PlayItem = "UShapeSkateboard")]
    public void Play_UShapeSkateboard()
    {
      Console.WriteLine("我是游客3,我現在玩的是:U型滑板");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

7.主函數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Visitor;
namespace Com.Design.Gof.Test
{
  class Program
  {
    static void Main(string[] args)
    {
      //三個小伙子,開車到長隆歡樂世界 游玩, 每個人想玩的項目都不一樣。
      List<ITourist> list = new List<ITourist> {
       new TouristOne(),
       new TouristTwo(),
       new TouristThree()
      };
      //車開到了長隆 南大門,長隆到了
      ChangLongHappyWorld happyWorld = new ChangLongHappyWorld();
      //開始 游玩 長隆啦!!
      foreach (var visit in list) {
        visit.Play(happyWorld);
        Console.WriteLine("------------------------------------------------");
      }
      Console.ReadKey();
    }
  }
}

8.運行結果

C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

9.總結

運用C#的反射 來實現 復雜點的 訪問者模式 。

附:完整實例代碼點擊此處本站下載

更多關于C#相關內容還可查看本站專題:《C#數據結構與算法教程》、《C#窗體操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程》

希望本文所述對大家C#程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆中县| 浪卡子县| 全州县| 万源市| 石楼县| 石城县| 酉阳| 铜陵市| 文昌市| 通榆县| 金湖县| 柳林县| 文水县| 合水县| 荔波县| 泗洪县| 屏东县| 比如县| 济阳县| 柞水县| 左权县| 文成县| 乐昌市| 清流县| 新野县| 松原市| 临沂市| 垦利县| 彭山县| 铜梁县| 陇南市| 化隆| 黔西县| 浦江县| 花莲市| 屯门区| 华亭县| 郴州市| 灌南县| 偏关县| 黄浦区|