科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件无废话C#设计模式之十二:Bridge

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本系列文章将向大家介绍一下C#的设计模式,此为第十二篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

作者:LoveCherry 来源:博客园 2007年12月4日

关键字: C# 设计模式 BRIDGE

  • 评论
  • 分享微博
  • 分享邮件
本系列文章将向大家介绍一下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");
  }
  }
  }

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章