首页 > 新闻系统 > 编程天地 > 文章正文

无废话C#设计模式三:Abstract Factory

2007-10-19 09:50:06 来源:博客园 作者:LoveCherry 点击:
本系列文章将向大家介绍一下C#的设计模式,此为第三篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

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

  意图

  提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  场景

  还是上次说的那个网络游戏,定下来是一个休闲的FPS游戏。和CS差不多,8到16个玩家在游戏里面分成2组对战射击。现在要实现初始化场景的工作。要呈现一个三维物体一般两个元素是少不了的,一是这个物体的骨架,也就是模型,二就是这个骨架上填充的纹理。

  我们知道,这样的一个游戏不可能只有一张地图,而且地图的数量肯定是会一直增加的。如果游戏在初始化场景的时候需要根据不同的地图分别加载模型和纹理对象,那么势必就会使得场景的扩充变得很不方便。由此,我们引入Abstract Factory,抽象工厂生产的都是实际类型的接口(或者抽象类型),如果加了新的场景可以确保不需要修改加载场景的那部分代码。

  示例代码

以下是引用片段:
  using System;
  using System.Reflection;
  namespace AbstractFactoryExample
  {
  class Program
  {
  static void Main(string[] args)
  {
  Patrix patrix = new Patrix();
  patrix.LoadScene("HalfPaper");
  patrix.LoadScene("Matrix");
  }
  }
  class Patrix
  {
  private PatrixSceneFactory GetGameScene(string gameSceneName)
  {
  return (PatrixSceneFactory)Assembly.Load("AbstractFactoryExample").CreateInstance("AbstractFactoryExample." + gameSceneName);
  }
  public void LoadScene(string gameSceneName)
  {
  PatrixSceneFactory psf = GetGameScene(gameSceneName);
  Texture texture = psf.CreateTexture();
  Model model = psf.CreateModel();
  model.FillTexture(texture);
  }
  }
  abstract class PatrixSceneFactory
  {
  public abstract Model CreateModel();
  public abstract Texture CreateTexture();
  }
  abstract class Model
  {
  public abstract void FillTexture(Texture texture);
  }
  abstract class Texture
  {
  }
  class HalfPaper : PatrixSceneFactory
  {
  public override Model CreateModel()
  {
  return new HalfPaperModel();
  }
  public override Texture CreateTexture()
  {
  return new HalfPaperTexture();
  }
  }
  class HalfPaperModel : Model
  {
  public HalfPaperModel()
  {
  Console.WriteLine("HalfPaper Model Created");
  }
  public override void FillTexture(Texture texture)
  {
  Console.WriteLine("HalfPaper Model is filled Texture");
  }
  }
  class HalfPaperTexture : Texture
  {
  public HalfPaperTexture()
  {
  Console.WriteLine("HalfPaper Texture Created");
  }
  }
  class Matrix : PatrixSceneFactory
  {
  public override Model CreateModel()
  {
  return new MatrixModel();
  }
  public override Texture CreateTexture()
  {
  return new MatrixTexture();
  }
  }
  class MatrixModel : Model
  {
  public MatrixModel()
  {
  Console.WriteLine("Matrix Model Created");
  }
  public override void FillTexture(Texture texture)
  {
  Console.WriteLine("Matrix Model is filled Texture");
  }
  }
  class MatrixTexture : Texture
  {
  public MatrixTexture()
  {
  Console.WriteLine("Matrix Texture Created");
  }
  }
  }

9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203