C#设计模式三:FactoryMethod(含实例源码)

2020-12-10  本文已影响0人  GoodTekken

主程序

 class Program
    {
        static void Main(string[] args)
        {
            Patrix patrix = new Patrix();
            patrix.LoadScene("HalfPaper");
            patrix.LoadScene("Matrix");

            Console.ReadKey();
        }
    }

Patrix类

 class Patrix
    {
        private PatrixSceneFactory GetGameScene(string gameSceneName)
        {
            return (PatrixSceneFactory)Assembly.Load("3.FactoryMethod").CreateInstance("_3.FactoryMethod." + gameSceneName + "Factory");
        }
        public void LoadScene(string gameSceneName)
        {
            PatrixSceneFactory psf = GetGameScene(gameSceneName);
            PatrixScene ps = psf.CreateScene();
            ps.InitScene();
        }
    }

PatrixSceneFactory类

    abstract class PatrixSceneFactory
    {
        public abstract PatrixScene CreateScene();
    }

PatrixScene类

    abstract class PatrixScene
    {
        public void InitScene()
        {
            Texture texture = CreateTexture();
            Model model = CreateModel();
            model.FillTexture(texture);
        }
        public abstract Model CreateModel();
        public abstract Texture CreateTexture();
    }

HalfPaperFactory类

    class HalfPaperFactory:PatrixSceneFactory
    {
        public override PatrixScene CreateScene()
        {
            return new HalfPaper();
        }
    }

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

MatrixFactory类

    class MatrixFactory:PatrixSceneFactory
    {
        public override PatrixScene CreateScene()
        {
            return new Matrix();
        }
    }

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

Model类

    abstract class Model
    {
        public abstract void FillTexture(Texture texture);
    }

Texture类

    abstract class Texture
    {
    }

意图

场景

代码说明

何时采用

实现要点

注意事项

C#设计模式一:Singleton(含实例源码)
C#设计模式二:AbstractFactory(含实例源码)
C#设计模式三:FactoryMethod(含实例源码)
C#设计模式四:Prototype(含实例源码)
C#设计模式五:Builder(含实例源码)
C#设计模式六:Adapter(含实例源码)
C#设计模式七:Facade(含实例源码)
C#设计模式八:Proxy(含实例源码)
C#设计模式九:Flyweight(含实例源码)
C#设计模式十:Composite(含实例源码)
C#设计模式十一:Bridge(含实例源码)

上一篇 下一篇

猜你喜欢

热点阅读