本系列文章将向大家介绍一下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");
}
}
}