策略(Strategy)

2017-06-21  本文已影响0人  非空白

意图

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

结构

策略结构图

适用性

优缺点

注意事项



示例

提供一种网络安全传输数据的机制(加密/解密),而且根据需要随时可更换这种机制。

实现(C#)

using System;

// 对称加密算法抽象类
public abstract class SymmetricAlgorithm 
{
    // ..
} 

public sealed class Aes : SymmetricAlgorithm
{

    public override string ToString()
    {
        return "Aes";
    }
}

public sealed class DES : SymmetricAlgorithm
{
    public override string ToString()
    {
        return "DES";
    }
}

public sealed class RC2 : SymmetricAlgorithm
{
    public override string ToString()
    {
        return "RC2";
    }
}

public class NetWork
{
    private SymmetricAlgorithm algorithm;

    public NetWork(SymmetricAlgorithm algorithm)
    {
        this.algorithm = algorithm;
    }

    public void SetAlgorithm(SymmetricAlgorithm algorithm)
    {
        this.algorithm = algorithm;
    }

    public void Send(string message)
    {
        Console.WriteLine("正使用「{0}」对称算法,安全地传输数据...",algorithm);
    }
}

public class App
{
    public static void Main(string[] args)
    {
        NetWork network = new NetWork(new RC2());

        network.Send("message");

        //切换加密机制
        network.SetAlgorithm(new DES());
        network.Send("message");

    }
}

// 控制台输出:
//  正使用「RC2」对称算法,安全地传输数据...
//  正使用「DES」对称算法,安全地传输数据...
上一篇 下一篇

猜你喜欢

热点阅读