最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年09月13日 11:20:31   作者:GhostRider  
這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長隆歡樂世界問題的具體實現技巧,需要的朋友可以參考下

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

一、理論定義

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

二、應用舉例

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

三、具體編碼

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  想玩:十環(huán)過山車,龍卷風暴,夢幻旋馬
  /// </summary>
  public class TouristOne : ITourist
  {
    /// <summary>
    /// 十環(huán)過山車
    /// </summary>
    [PlayAttribute(PlayItem = "TenthRingRollerCoaster")]
    public void Play_TenthRingRollerCoaster() {
      Console.WriteLine("我是游客1,我現在玩的是:十環(huán)過山車");
    }
    /// <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  想玩:空中警察,歡樂摩天輪,超級水戰(zhàn)
  /// </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>
    /// 超級水戰(zhàn)
    /// </summary>
    [PlayAttribute(PlayItem = "SuperWater")]
    public void Play_SuperWater()
    {
      Console.WriteLine("我是游客2,我現在玩的是:超級水戰(zhàn)");
    }
    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.運行結果

9.總結

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

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

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

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

相關文章

  • Unity shader實現移動端模擬深度水效果

    Unity shader實現移動端模擬深度水效果

    這篇文章主要為大家詳細介紹了Unity shader實現移動端模擬深度水效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#打印Word文檔的4種方法

    C#打印Word文檔的4種方法

    Word文檔是日常辦公和學習中不可或缺的一部分,這篇文章將提供以下4種通過C# 打印Word文檔的方法,以適應不同的場景需求,需要的小伙伴可以了解下
    2025-02-02
  • 深入分析C#鍵盤勾子(Hook),屏蔽鍵盤活動的詳解

    深入分析C#鍵盤勾子(Hook),屏蔽鍵盤活動的詳解

    本篇文章是對C#鍵盤勾子(Hook),屏蔽鍵盤活動進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C# BeginInvoke實現異步編程方式

    C# BeginInvoke實現異步編程方式

    這篇文章主要介紹了C# BeginInvoke實現異步編程方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • c# 9.0新特性nint和Pattern matching的使用方法

    c# 9.0新特性nint和Pattern matching的使用方法

    這篇文章主要介紹了c# 9.0新特性nint和Pattern matching的使用方法,文中講解非常細致,幫助你更好的學習c# 9.0,有需求的朋友可以參考下
    2020-06-06
  • C# 獲得本地通用網卡信息的示例代碼

    C# 獲得本地通用網卡信息的示例代碼

    這篇文章主要介紹了C# 獲得本地通用網卡信息的示例代碼,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-08-08
  • C#.NET獲取撥號連接的寬帶連接方法

    C#.NET獲取撥號連接的寬帶連接方法

    這篇文章主要介紹了C#.NET獲取撥號連接的寬帶連接方法,實例演示了一個C#封裝的ADSL撥號連接類及其使用方法,需要的朋友可以參考下
    2015-06-06
  • vscode編寫latex的方法

    vscode編寫latex的方法

    這篇文章主要介紹了vscode編寫latex的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 利用C#與PLC通信實現設備遠程控制與管理

    利用C#與PLC通信實現設備遠程控制與管理

    PLC是工業(yè)自動化中用于控制機械設備、生產線等的核心設備,通過與PLC的通信,我們可以實現設備的遠程監(jiān)控、數據采集等功能,C#作為一種現代化的編程語言,能夠非常方便地與PLC進行通信,本文將介紹如何利用C#與PLC進行通信,并實現設備的遠程控制與管理
    2025-02-02
  • c#中datagridview處理非綁定列的方法

    c#中datagridview處理非綁定列的方法

    這篇文章主要介紹了c#中datagridview處理非綁定列的方法,實例分析了C#中datagridview的使用技巧,需要的朋友可以參考下
    2015-06-06

最新評論

韶关市| 临武县| 桂东县| 二连浩特市| 凌云县| 分宜县| 鸡西市| 枞阳县| 溧水县| 尼木县| 甘洛县| 郓城县| 铜陵市| 甘南县| 合山市| 清徐县| 太康县| 五莲县| 台东县| 南江县| 清镇市| 东至县| 电白县| 阿图什市| 临湘市| 昌平区| 旬邑县| 弋阳县| 连江县| 墨玉县| 页游| 汕尾市| 明星| 西丰县| 南汇区| 彰化县| 天水市| 景宁| 长阳| 福安市| 克东县|