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");