扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
意图
将抽象部分与实现部分分离,使它们都可以独立的变化。
场景
还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决。现在的问题就是,不仅仅是游戏场景会不断扩充,而且游戏的模式也在不断扩充。比如,除了最基本的战斗模式之外,还会有道具模式,金币模式等。
对于这种在多个维度上都会有变化或扩充需求的项目来说,可以考虑引入桥接模式。或许你会说,不管是什么场景,不管什么模式,都可以是抽象场景的一个子类,但是,如果这样的话,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"); } } } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者