欢迎来到天天文库
浏览记录
ID:11993878
大小:25.56 KB
页数:4页
时间:2018-07-15
《设计模式3:abstract factory(抽象工厂)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、无废话C#设计模式之三:AbstractFactory意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。场景还是上次说的那个网络游戏,定下来是一个休闲的FPS游戏。和CS差不多,8到16个玩家在游戏里面分成2组对战射击。现在要实现初始化场景的工作。要呈现一个三维物体一般两个元素是少不了的,一是这个物体的骨架,也就是模型,二就是这个骨架上填充的纹理。我们知道,这样的一个游戏不可能只有一张地图,而且地图的数量肯定是会一直增加的。如果游戏在初始化场景的时候需要根据不同的地图分别加载模型和纹理对象,那么势必
2、就会使得场景的扩充变得很不方便。由此,我们引入AbstractFactory,抽象工厂生产的都是实际类型的接口(或者抽象类型),如果加了新的场景可以确保不需要修改加载场景的那部分代码。示例代码usingSystem;usingSystem.Reflection;namespaceAbstractFactoryExample{classProgram{staticvoidMain(string[]args){Patrixpatrix=newPatrix();patrix.LoadScene("HalfPaper");pat
3、rix.LoadScene("Matrix");}}classPatrix{privatePatrixSceneFactoryGetGameScene(stringgameSceneName){return(PatrixSceneFactory)Assembly.Load("AbstractFactoryExample").CreateInstance("AbstractFactoryExample."+gameSceneName);}publicvoidLoadScene(stringgameSceneName){Pa
4、trixSceneFactorypsf=GetGameScene(gameSceneName);Texturetexture=psf.CreateTexture();Modelmodel=psf.CreateModel();model.FillTexture(texture);}}abstractclassPatrixSceneFactory{publicabstractModelCreateModel();publicabstractTextureCreateTexture();}abstractclassModel{
5、publicabstractvoidFillTexture(Texturetexture);}abstractclassTexture{}classHalfPaper:PatrixSceneFactory{publicoverrideModelCreateModel(){returnnewHalfPaperModel();}publicoverrideTextureCreateTexture(){returnnewHalfPaperTexture();}}classHalfPaperModel:Model{publicH
6、alfPaperModel(){Console.WriteLine("HalfPaperModelCreated");}publicoverridevoidFillTexture(Texturetexture){Console.WriteLine("HalfPaperModelisfilledTexture");}}classHalfPaperTexture:Texture{publicHalfPaperTexture(){Console.WriteLine("HalfPaperTextureCreated");}}cl
7、assMatrix:PatrixSceneFactory{publicoverrideModelCreateModel(){returnnewMatrixModel();}publicoverrideTextureCreateTexture(){returnnewMatrixTexture();}}classMatrixModel:Model{publicMatrixModel(){Console.WriteLine("MatrixModelCreated");}publicoverridevoidFillTexture
8、(Texturetexture){Console.WriteLine("MatrixModelisfilledTexture");}}classMatrixTexture:Texture{publicMatrixTexture(){Console.WriteLine("MatrixTextureCreated");}
此文档下载收益归作者所有