科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件无废话C#设计模式之四:Factory Method

无废话C#设计模式之四:Factory Method

  • 扫一扫
    分享文章到微信

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

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

作者:LoveCherry 来源:博客园 2007年11月19日

关键字: C# 设计模式 Factory

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

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

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

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