- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式4:FactoryMethod(工厂方法)
无废话C#设计模式之四:Factory Method
意图
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
场景
上次,我们使用抽象工厂解决了生产一组产品的问题,但是我们把各个场景作为了具体工厂来生产场景模式和场景纹理两个产品。在调用代码中也并没有出现具体工厂的影子。其实,场景类要做的不仅仅是创建具体的产品系列,可能它还需要做一个初始化工作。那么,我们就需要在调用代码中能得到这个场景类。
在前一节中,由于场景类(比如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 HalfPaper
文档评论(0)