设计模式——策略模式

策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。
在实践中,只要听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理。
下面用完成加法和减法的需求来看一下基本思路。

首先定义算法公共接口 Strategy:

//算法抽象类
public abstract class Strategy
{
    public abstract void AlgorithmInterface(double a, double b);
}

定义具体的算法或行为:


//加法算法类
public class ConcreteStrategyAdd : Strategy
{
    private double a, b;
    public ConcreteStrategyAdd()
    {
        //初始化的时候可以对算法进行相应设置
    }
    public override double AlgorithmInterface(double a, double b)
    {
        return a + b;
    }
}

//减法算法类
public class ConcreteStrategySub : Strategy
{
    private double a, b;
    public ConcreteStrategySub()
    {
    }
    public override double AlgorithmInterface(double a, double b)
    {
        return a - b;
    }
}

利用工厂模式生成算法策略的管理类 Context:


public class Context
{
    private Strategy strategy;
    //初始化拿到具体的算法模块
    public Context(char type)
    {
        switch (type)
        {
            case '+':
                this.strategy = new ConcreteStrategyAdd();
                break;
            case '-':
                this.strategy = new ConcreteStrategySub();
                break;
        }
    }
    //调用该算法进行相应计算
    public void ContextInterface(double a, double b)
    {
        strategy.AlgorithmInterface(a, b);
    }
}

客户端调用:

public class Main
{
    public void compute()
    {
        Context ct = new Context('+');
        ct.ContextInterface(1, 1);
        Context ct1 = new Context('-');
        ct1.ContextInterface(1, 1);
    }
}

至此,各个具体算法模块互相分离,修改某个算法就只需更改对应模块,新增只需新加算法模块去继承Strategy,而且管理类将算法模块与客户端彻底分离开,减少耦合性。

下期讲解——装饰模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值