WEB开发网
开发学院软件开发C语言 无废话C#设计模式之十二:Bridge 阅读

无废话C#设计模式之十二:Bridge

 2009-04-02 08:23:22 来源:WEB开发网   
核心提示:意图 将抽象部分与实现部分分离,使它们都可以独立的变化,无废话C#设计模式之十二:Bridge,场景还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决,一味进行继承并不是什么好方法,桥接模式的思想是把继承转化为组合,现在的问题就是,不仅仅是游戏场景会不断扩充

意图

将抽象部分与实现部分分离,使它们都可以独立的变化。

场景

还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决。现在的问题就是,不仅仅是游戏场景会不断扩充,而且游戏的模式也在不断扩充。比如,除了最基本的战斗模式之外,还会有道具模式,金币模式等。

对于这种在多个维度上都会有变化或扩充需求的项目来说,可以考虑引入桥接模式。或许你会说,不管是什么场景,不管什么模式,都可以是抽象场景的一个子类,但是,如果这样的话,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");

        }

    }

}

1 2 3 4  下一页

Tags:废话 设计模式 十二

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接