设计模式(一)——工厂模式、策略模式

简单工厂模式

工厂模式是最常用的设计模式之一,属于创建型设计模式。通过创建不同的子类,具体的逻辑在子类中。

  • 典型例子:实现简单的加、减、乘、除的计算
    简单工厂模式类设计图

上图是利用VS类设计工具绘制的UML类图,OperationFactory负责创建,OperationAdd、OperationSub、OperationMul、OperationDiv分别对应加、减、乘、除的具体计算逻辑,他们都继承自Operation基类。后期扩展需要其他运算方法时只需要添加对应的计算类然后修改OperationFactory中的创建方法即可。

  • Operation基类实现
    public abstract class Operation
    {
        public double NumberA = 0;
        public double NumberB = 0;

        public virtual double GetResult()
        {
            return 0;
        }
    }
  • Operation派生计算类
 public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            return NumberA + NumberB;
        }
    }
 public class OperationSub : Operation
    {
        public override double GetResult()
        {
            return NumberA - NumberB;
        }
    }
public class OperationMul : Operation
    {
        public override double GetResult()
        {
            return NumberA * NumberB;
        }
    }
public class OperationDiv : Operation
{
        public override double GetResult()
        {
            if (NumberB == 0)
            {
                return 0;
            }
            return NumberA / NumberB;
        }
}
    
  • OperationFactory工厂类
    public class OperationFactory
    {
        public static Operation operation;
        public static Operation CreateOperate(string operate)
        {
            operation = null;
            switch (operate)
            {
                case "+": operation = new OperationAdd(); break;
                case "-": operation = new OperationSub(); break;
                case "*": operation = new OperationMul(); break;
                case "/": operation = new OperationDiv(); break;
            }
            return operation;
        }
    }
  • 程序调试入口
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var operation = OperationFactory.CreateOperate("*");
            operation.NumberA = 30;
            operation.NumberB = 50;
            Console.WriteLine(operation.GetResult());
        }
    }

通过CreateOperate方法创建不同的计算方法,入口处不关心具体实现逻辑
通过简单工厂模式我们可以很方便的扩展程序功能,但是当类似的业务逻辑大量增加时会使系统的类成倍的增加,一定程度上增加了系统的复杂度。

策略模式

在策略模式中,一个类的行为或算法可以在运行时更改。本质上策略模式和简单工厂模式十分类似,策略模式将工厂方法封装于策略对象中,策略对象改变改变对象的执行算法。如下图类结构所示,将上述例子中的简单计算器用策略模式改写一下。
策略模式类结构图
核心类的StrategyCalculate的改动情况:

public class StrategyCalculate
    {
        private StrategyOperation strategy;

        public StrategyCalculate(string operation)
        {
            switch (operation)
            {
                case "+": strategy = new StrategyAdd(); break;
                case "-": strategy = new StrategySub(); break;
                case "*": strategy = new StrategyMul(); break;
                case "/": strategy = new StrategyDiv(); break;
            }
        }

        public StrategyOperation Strategy
        {
            get
            {
                return strategy;
            }
        }

        public double Calculte(double a, double b)
        {
            return Strategy.GetResult(a,b);
        }
    }
     class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            StrategyCalculate calculate = new StrategyCalculate("+");
            Console.WriteLine(calculate.Calculte(50, 13));
        }
    }
    

对比简单工厂模式和策略模式发现其实两种设计模式极为类似,都是通过封装了不同功能的方法来实现程序上的解耦,但是这两种设计模式都存在一个问题,不管是将方法封装到工厂类、还是策略选择类中都不可避免的使用switch方法来选择策略。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值