本系列文章將向大家介紹一下C#的設計模式,此為第十二篇文章,相信對大家會有所幫助的。廢話不多說,繼續來看。
意圖
將抽象部分與實現部分分離,使它們都可以獨立的變化。
場景
還是說我們要做的網絡游戲,多個場景需要擴充的問題我們已經采用了創建型模式來解決。現在的問題就是,不僅僅是游戲場景會不斷擴充,而且游戲的模式也在不斷擴充。比如,除了最基本的戰斗模式之外,還會有道具模式,金幣模式等。
對於這種在多個維度上都會有變化或擴充需求的項目來說,可以考慮引入橋接模式。或許你會說,不管是什麼場景,不管什麼模式,都可以是抽象場景的一個子類,但是,如果這樣的話,4個場景和3種模式就會產生12個子類,而10個場景5種模式就會有50個子類。一味進行繼承並不是什麼好方法,橋接模式的思想是把繼承轉化為組合,把乘法(10*5=50)轉化為加法(10+5=15)。
示例代碼
以下是引用片段:
using System;
using System.Collections.Generic;
using System.Text;
namespace BridgeExample
{
class Program
{
static void Main(string[] args)
{
PatrixScene halfPaper = new HalfPaper();
halfPaper.Mode = new GoldMode();
halfPaper.LoadScene();
PatrixScene matrix = new Matrix();
matrix.Mode = new PrpoertyMode();
matrix.LoadScene();
}
}
abstract class PatrixScene
{
protected GameMode mode;
public GameMode Mode
{
get { return mode; }
set { mode = value; }
}
public abstract void LoadScene();
}
class HalfPaper : PatrixScene
{
public override void LoadScene()
{
Console.WriteLine("Load HalfPaper Completed");
mode.InitScene();
}
}
class Matrix : PatrixScene
{
public override void LoadScene()
{
Console.WriteLine("Load Matrix Completed");
mode.InitScene();
}
}
abstract class GameMode
{
public abstract void InitScene();
}
class PrpoertyMode : GameMode
{
public override void InitScene()
{
Console.WriteLine("Init Property Mode Completed");
}
}
class GoldMode : GameMode
{
public override void InitScene()
{
Console.WriteLine("Init Gold Mode Completed");
}
}
}