C#设计模式之四:Factory Method

来源:网络整理 责任编辑:栏目编辑 发表时间:2013-07-01 15:18 点击:
本系列文章将向大家介绍一下C#的设计模式,此为第四篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

  意图

  定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

  场景

  上次,我们使用抽象工厂解决了生产一组产品的问题,但是我们把各个场景作为了具体工厂来生产场景模式和场景纹理两个产品。在调用代码中也并没有出现具体工厂的影子。其实,场景类要做的不仅仅是创建具体的产品系列,可能它还需要做一个初始化工作。那么,我们就需要在调用代码中能得到这个场景类。

  在前一节中,由于场景类(比如HalfPaper)本身是具体级别的(具体工厂)。那么,我们也不应该在调用代码中直接依赖场景类。因此,我们可以使用工厂方法来生产这个具体产品。

  示例代码

  using System;
  using System.Reflection;
  namespace FactoryMethodExample
  {
  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("FactoryMethodExample").CreateInstance("FactoryMethodExample." + gameSceneName + "Factory");
  }
  public void LoadScene(string gameSceneName)
  {
  PatrixSceneFactory psf = GetGameScene(gameSceneName);
  PatrixScene ps = psf.CreateScene();
  ps.InitScene();
  }
  }
  abstract class PatrixSceneFactory
  {
  public abstract PatrixScene CreateScene();
  }
  abstract class PatrixScene
  {
  public void InitScene()
  {
  Texture texture = CreateTexture();
  Model model = CreateModel();
  model.FillTexture(texture);
  }
  public abstract Model CreateModel();
  public abstract Texture CreateTexture();
  }
  abstract class Model
  {
  public abstract void FillTexture(Texture texture);
  }
  abstract class Texture
  {
  }
  class HalfPaperFactory : PatrixSceneFactory
  {
  public override PatrixScene CreateScene()
  {
  return new HalfPaper();
  }
  }
  class HalfPaper : PatrixScene
  {
  public HalfPaper()
  {
  Console.WriteLine("HalfPaper Creating");
  }
  public override Model CreateModel()
  {
  return new HalfPaperModel();
  }
  public override Texture CreateTexture()
  {
  return new HalfPaperTexture();
  }
  }
  class HalfPaperModel : Model
  {
  public HalfPaperModel()
  {
  Console.WriteLine("HalfPaper Model Creating");
  }
  public override void FillTexture(Texture texture)
  {
  Console.WriteLine("HalfPaper Model is filled Texture");
  }
  }
  class HalfPaperTexture : Texture
  {
  public HalfPaperTexture()
  {
  Console.WriteLine("HalfPaper Texture Created");
  }
  }
  class MatrixFactory : PatrixSceneFactory
  {
  public override PatrixScene CreateScene()
  {
  return new Matrix();
  }
  }
  class Matrix : PatrixScene
  {
  public Matrix()
  {
  Console.WriteLine("Matrix Created");
  }
  public override Model CreateModel()
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 用C#制作屏幕捕获程序
    • .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上
    • 遍历ArrayList易犯错误
    • C#对XML操作:一个处理XML文件的类(1)
    • .NET简谈反射(动态调用)
    • 使用C#编写LED样式时钟控件
    • DataList嵌套问题 如何删除内层子DataList的记录
    • 怎样用C#实现完整文档打印功能
    • .NET简谈自定义事务资源管理器
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1