真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

一、理論定義

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

二、應(yī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
  {
    /// 
    /// 游玩
    /// 
    /// 長隆歡樂世界
     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;
    /// 
    /// 游玩的項目
    /// 
    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
{
  /// 
  /// 長隆歡樂世界
  /// 
  public class ChangLongHappyWorld
  {
    /// 
    /// 接待各個訪問者
    /// 
    /// 
    public void visit(ITourist visitor) {
      //每個旅游者想玩的項目不一樣。使用反射,方便調(diào)用
      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
{
  /// 
  /// 旅游者 1  想玩:十環(huán)過山車,龍卷風暴,夢幻旋馬
  /// 
  public class TouristOne : ITourist
  {
    /// 
    /// 十環(huán)過山車
    /// 
    [PlayAttribute(PlayItem = "TenthRingRollerCoaster")]
    public void Play_TenthRingRollerCoaster() {
      Console.WriteLine("我是游客1,我現(xiàn)在玩的是:十環(huán)過山車");
    }
    /// 
    /// 龍卷風暴
    /// 
     [PlayAttribute(PlayItem = "TornadoStorm")]
    public void Play_TornadoStorm()
    {
      Console.WriteLine("我是游客1,我現(xiàn)在玩的是:龍卷風暴");
    }
    /// 
    /// 夢幻旋馬
    /// 
    [PlayAttribute(PlayItem = "DreamHorse")]
    public void Play_DreamHorse()
    {
      Console.WriteLine("我是游客1,我現(xiàn)在玩的是:夢幻旋馬");
    }
    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
{
  /// 
  /// 旅游者 2  想玩:空中警察,歡樂摩天輪,超級水戰(zhàn)
  /// 
  public class TouristTwo : ITourist
  {
    /// 
    /// 空中警察
    /// 
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_AirPolice() {
      Console.WriteLine("我是游客2,我現(xiàn)在玩的是:空中警察");
    }
    /// 
    /// 歡樂摩天輪
    /// 
    [PlayAttribute(PlayItem = "FerrisWheel")]
    public void Play_FerrisWheel()
    {
      Console.WriteLine("我是游客2,我現(xiàn)在玩的是:歡樂摩天輪");
    }
    /// 
    /// 超級水戰(zhàn)
    /// 
    [PlayAttribute(PlayItem = "SuperWater")]
    public void Play_SuperWater()
    {
      Console.WriteLine("我是游客2,我現(xiàn)在玩的是:超級水戰(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
{
  /// 
  /// 旅游者 3  想玩:四維影院,垂直極限,U型滑板
  /// 
  public class TouristThree : ITourist
  {
    /// 
    /// 四維影院
    /// 
    [PlayAttribute(PlayItem = "AirPolice")]
    public void Play_Cinema4D() {
      Console.WriteLine("我是游客3,我現(xiàn)在玩的是:四維影院");
    }
    /// 
    /// 垂直極限
    /// 
    [PlayAttribute(PlayItem = "VerticalLimit")]
    public void Play_VerticalLimit()
    {
      Console.WriteLine("我是游客3,我現(xiàn)在玩的是:垂直極限");
    }
    /// 
    /// U型滑板
    /// 
    [PlayAttribute(PlayItem = "UShapeSkateboard")]
    public void Play_UShapeSkateboard()
    {
      Console.WriteLine("我是游客3,我現(xiàn)在玩的是:U型滑板");
    }
    public void Play(ChangLongHappyWorld happyWorld)
    {
      happyWorld.visit(this);
    }
  }
}

7.主函數(shù)

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 list = new List {
       new TouristOne(),
       new TouristTwo(),
       new TouristThree()
      };
      //車開到了長隆 南大門,長隆到了
      ChangLongHappyWorld happyWorld = new ChangLongHappyWorld();
      //開始 游玩 長隆啦?。?      foreach (var visit in list) {
        visit.Play(happyWorld);
        Console.WriteLine("------------------------------------------------");
      }
      Console.ReadKey();
    }
  }
}

8.運行結(jié)果

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

9.總結(jié)

運用C#的反射 來實現(xiàn) 復雜點的 訪問者模式 。

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

更多關(guān)于C#相關(guān)內(nèi)容還可查看本站專題:《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#窗體操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》

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


當前題目:C#設(shè)計模式之Visitor訪問者模式解決長隆歡樂世界問題實例
文章鏈接:http://weahome.cn/article/ijjiss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部