橋接模式比較簡單,主要是運用了組合。
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();
}
}
}