一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

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

2022-01-21 14:07GhostRider C#

這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長隆歡樂世界問題的具體實現技巧,需要的朋友可以參考下

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

一、理論定義

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

二、應用舉例

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

三、具體編碼

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.每個人要玩什么項目,都有一個標志

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.長隆歡樂世界

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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.主函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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#程序設計有所幫助。

原文鏈接:http://www.cnblogs.com/HCCZX/archive/2012/08/02/2619723.html

延伸 · 閱讀

精彩推薦
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

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

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: 午夜在线播放免费人成无 | 无码人妻少妇色欲AV一区二区 | 亚洲福利一区二区精品秒拍 | 免费视频一级片 | 非洲黑人女bbwxxxx | 亚洲伦理影院 | 免费午夜网站 | 国产在线观看一区 | 特级淫片欧美高清视频蜜桃 | 无遮挡h肉动漫在线观看电车 | 日本videosdesexo乱 | 成人影院在线观看视频 | 久久99热狠狠色AV蜜臀 | 国产成人手机在线好好热 | 538免费精品视频搬运工 | 美女扒开胸罩露出奶了无遮挡免费 | 波多在线 | 日本护士handjob| 国产性色视频 | 国产1广场舞丰满老女偷 | 91制片厂果冻星空传媒3xg | 天天干天天爽天天操 | 第一次做m被调教经历 | 久久综合网久久综合 | 免费看片aⅴ免费大片 | 国产精品久久久免费视频 | 精品精品国产自在香蕉网 | 国产毛片一级aaaaa片 | 香蕉在线精品亚洲第一区 | 99精品视频在线观看re | 亚洲国产三级在线观看 | 久久永久免费视频 | 爽好舒服宝贝添奶吻戏 | 成人免费一区二区三区在线观看 | 成人永久免费福利视频网站 | 亚洲精品国产自在现线最新 | 日本在线观看www鲁啊鲁视频 | 网址在线观看你懂我意思吧免费的 | 美女奶口隐私免费视频网站 | 国产人成激情视频在线观看 | 久久er国产免费精品 |