简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

引入:

工厂方法模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了其子类

简单的来说,工厂模式实现的时候,客户端需要决定实例化哪一个工厂来实现抽象接口类,即工厂方法是把简单工厂的内部逻辑判断移到了客户端代码进行。想要加功能,本来是修改抽象工厂类,显示是修改客户端。

工厂方法克服了简答工厂违背开放-封闭原则的缺点,又保持了封闭对象创建过程的优点

class Program
    {
        class Coder
        {
            public void Code()
            {
                Console.WriteLine("Coding");
            }
            public void Play()
            {
                Console.WriteLine("Playing");
            }
        }
        class zyj : Coder
        { }
        class wjj : Coder
        { }
        interface IFactory
        {
            Coder CreateCoder();
        }
        class zyjs:IFactory
        {
            public Coder CreateCoder()
            {
                return new zyj();
            }
        }
        class wjjs:IFactory
        {
            public Coder CreateCoder()
            {
                return new wjj();
            }
        }
        static void Main(string[] args)//client
        {
            IFactory factory = new zyjs();
            Coder MissZhou = factory.CreateCoder();
            MissZhou.Code();
            MissZhou.Play();
            Console.Read();
        }

另:开放封闭原则

1. 它们 "面向扩展开放(Open For Extension)"。

也就是说模块的行为是能够被扩展的。当应用程序的需求变化时,我们可以使模块表现出全新的或与以往不同的行为,以满足新的需求。

2. 它们 "面向修改封闭(Closed For Modification)"。

模块的源代码是不能被侵犯的,任何人都不允许修改已有源代码。