设计模式-工厂方法模式(Factory Method)

一、工厂方法模式(Factory Method)

  • 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
  • 理解:通过定义抽象工厂父类来定义创建对象的公共接口,子类来决定生成的具体对象(即由子类来决定应该创建哪一个类)

二、工厂方法模式UML图

三、代码实现

工厂类

 public class OperationFactory
    {
        public static Operation createOperate(string operate)
        {
            Operation oper = null;
            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;
            }
            return oper;
        }
    }

构建工厂接口

 interface IFactory
    {
        Operation CreatOperation();
    }

    //加减乘除各键一个具体工厂去实现这个接口
    class AddFacroty : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationAdd();
        }
    }

加减乘除各建一个具体工厂去实现接口

class AddFacroty : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationAdd();
        }
    }

    class SubFacroty : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationSub();
        }
    }

    class MulFacroty : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationMul();
        }
    }

    class DivFacroty : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationDiv();
        }
    }

客户端代码

IFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOperation();
oper.Number=1;
oper.Number=2;
double result = oper.GetResult();

四、工厂方法和简单工厂

1.简单工厂一旦添加一个新的功能就需要修改之前类的方法逻辑,违背了开放-封闭原则(即简单工厂模式的缺点),所以工厂方法就来了

2.工厂方法能解决简单工厂问题,因为工厂方法模式是把具体需要创建哪个类交给抽象工厂中的子类来决定的,工厂类不在负责所有产品的创建,只是给出了必须实现的接口,这样在工厂方法模式中添加新功能的时候就不需要修改类的逻辑,直接添加新的工厂子类就可以了,符合了开放-封闭原则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值