DOTA版設計模式——橋接

來源:互聯網
上載者:User
橋接模式比較簡單,主要是運用了組合。
UML圖:

本文中我虛構了一些情境,大概在Dota中不常發生吧。
Dota中有5個隊友,假如,我說的是假如,你的隊友西瓜吃多了想要去噓噓,但是現在是關鍵,他是團控,又不能為了勝利犧牲一條內褲加褲子吧。那我們只能共用單位了,現在你可以控制自己也可以控制去噓噓的隊友的英雄。點擊哪個英雄就控制哪個,在這裡就可以用到橋接了。
上邊說到橋接是組合,首先英雄是不能缺少的,除非已經被對方送回泉水,還沒有重生,呵呵.......英雄來啦:
    public interface IHero
    {
        void Action();
    }

    /// <summary>
    /// 靈魂守衛
    /// </summary>
    public class Terrorblade : IHero
    {
        public Terrorblade()
        {
        }

        #region IHero 成員

        public void Action()
        {
            LandpyForm.Form.OutputResult("Terrorblade Action");
        }

        #endregion
    }

    /// <summary>
    /// 德魯伊
    /// </summary>
    public class Syllabear : IHero
    {
        public Syllabear()
        {
        }

        #region IHero 成員

        public void Action()
        {
            LandpyForm.Form.OutputResult("Syllabear Action");
        }

        #endregion
    }
還差什麼那,當然是我們玩家啦,沒有玩家的遊戲還叫遊戲嗎?
public class Gamer
    {
        private IHero _hero;
        public IHero Hero
        {
            set { _hero = value; }
        }

        public void Action()
        {
            _hero.Action();
        }
    }
Gamer類中包含了IHero介面,依賴倒置嘛,不管有什麼新英雄,Gamer的代碼不用改動了,解耦絕對的解耦,HeadFirst所說"多用組合少用繼承"啦。
測試代碼如下:
            DotaPatternLibrary.Bridge.Gamer gamer = new DotaPatternLibrary.Bridge.Gamer();
            DotaPatternLibrary.Bridge.IHero hero = new DotaPatternLibrary.Bridge.Syllabear();
            gamer.Hero = hero;
            gamer.Action();
            hero = new DotaPatternLibrary.Bridge.Terrorblade();
            gamer.Hero = hero;
            gamer.Action();
看吧,可以控制的英雄可以隨時切換了吧,讓隊友快去噓噓吧。
完整代碼:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using DotaCommon;

namespace DotaPatternLibrary.Bridge
{

    public interface IHero
    {
        void Action();
    }

    /// <summary>
    /// 靈魂守衛
    /// </summary>
    public class Terrorblade : IHero
    {
        public Terrorblade()
        {
        }

        #region IHero 成員

        public void Action()
        {
            LandpyForm.Form.OutputResult("Terrorblade Action");
        }

        #endregion
    }

    /// <summary>
    /// 德魯伊
    /// </summary>
    public class Syllabear : IHero
    {
        public Syllabear()
        {
        }

        #region IHero 成員

        public void Action()
        {
            LandpyForm.Form.OutputResult("Syllabear Action");
        }

        #endregion
    }

    public class Gamer
    {
        private IHero _hero;
        public IHero Hero
        {
            set { _hero = value; }
        }

        public void Action()
        {
            _hero.Action();
        }
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.