C#设计模式二:AbstractFactory(含实例源码)

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

主程序

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

            Console.ReadKey();
        }
    }
}

Patrix类

using System.Reflection;
    class Patrix
    {
        private PatrixSceneFactory GetGameScene(string gameSceneName)
        {
            return (PatrixSceneFactory)Assembly.Load("2.AbstractFactory").CreateInstance("_2.AbstractFactory." + gameSceneName);
        }
        public void LoadScene(string gameSceneName)
        {
            PatrixSceneFactory psf = GetGameScene(gameSceneName);
            Texture texture = psf.CreateTexture();
            Model model = psf.CreateModel();
            model.FillTexture(texture);
        }
    }

PatrixSceneFactory类

    abstract class PatrixSceneFactory
    {
        public abstract Model CreateModel();

        public abstract Texture CreateTexture();
    }

Model类

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

Texture类

    abstract class Texture
    {
    }

HalfPaper类

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

    class HalfPaperTexture : Texture
    {
        public HalfPaperTexture()
        {
            Console.WriteLine("HalfPaper Texture Created");
        }
    }

Matrix类

    class Matrix : PatrixSceneFactory
    {
        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");
        }
    }

意图

场景

代码说明

何时采用

实现要点

注意事项

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

上一篇 下一篇

猜你喜欢

热点阅读