工厂方法模式 FactoryMethod---Design Pattern 1

工厂方法模式 FactoryMethod

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

工厂方法解决了简单工厂模式难以扩展的问题。

把简单工厂类分解为抽象基类和若干个具体类如下代码:

    //抽象的工厂方法“总部”类FactoryMethod
    public abstract class FactoryMethod
    {
        public abstract Food Creator(); //抽象的工厂方法Creator返回目标Food对象
    }
    //原来的分工厂 具体子类TomatoesFactory
    public class TomatoesFactory : FactoryMethod
    {
        //实现功能的具体的工厂方法Creator
        public override Food Creator()
        {
            return new Tomatoes();  //返回new出的具体对象
        }
    }
    //新增的分工厂 具体子类PotatoesFactory
    public class PotatoesFactory : FactoryMethod
    {
        public override Food Creator()
        {
            return new Potatoes();
        }
    }
    //需求 抽象类Food
    public abstract class Food
    {
        public abstract void Print();
    }
    //原来的需求 具体类Tomatoes
    public class Tomatoes : Food
    {
        public override void Print()
        {
            Console.WriteLine("番茄炒蛋!");
        }
    }
    //新增的需求 具体类Potatoes
    public class Potatoes : Food
    {
        public override void Print()
        {
            Console.WriteLine("土豆肉丝!");
        }
    }
    //程序调用入口(Main方法)
    class Program
    {
        static void Main(string[] args)
        {
            //原来的需求
            FactoryMethod tomatoesFactory = new TomatoesFactory();
            tomatoesFactory.Creator().Print();
            //新增的需求
            FactoryMethod potatoesFactory = new PotatoesFactory();
            potatoesFactory.Creator().Print();
            Console.ReadKey();
        }
    }

如果需要添加新功能/产品时,我们可以利用多态性来轻松完成扩展。

在工厂方法模式中,工厂类与具体产品类具有平行的等级结构,它们之间是一一对应的

也就是说,增加功能时要“成对”增加。

注意:工厂方法模式中每个具体工厂类只完成单个实例的创建,如果要实现工厂多元化(一个工厂生产多个实例),就要用到抽象工厂模式。

原文地址:https://www.cnblogs.com/wangweiabcd/p/3905243.html