zoukankan      html  css  js  c++  java
  • 工厂方法模式 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();
            }
        }
    

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

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

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

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

  • 相关阅读:
    Jmeter的两种录制脚本的方式
    【.NET】设置EntityFramework中decimal类型数据精度 [转]
    vscode格式化vue不换行
    mysql5.7 noinstall 安装 【转载】
    配置STP、RSTP以及负载均衡
    配置3层交换机VLAN间通信
    配置单臂路由
    配置DTP
    配置trunk
    配置VLAN
  • 原文地址:https://www.cnblogs.com/wangweiabcd/p/3905243.html
Copyright © 2011-2022 走看看