23种设计模式之(十六)策略模式(Strategy )
本文主要介绍23种设计模式之策略模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
策略模式(Strategy)
概念
策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略),Strategy模式主要用来平滑地处理算法的切换 。
GoF对策略模式的定义是:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
应用场景
(1)、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
(2)、一个系统需要动态地在几种算法中选择一种。
(3)、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 策略模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180918
/************************************************************************/
#include <iostream>
class Strategy
{
public:
virtual void crypt() = 0;
};
class AES : public Strategy
{
public:
virtual void crypt()
{
printf("AES encrypt\n" );
}
};
class DES : public Strategy
{
public:
virtual void crypt()
{
printf("DES encrypt\n" );
}
};
class Context
{
public:
void setStrategy(Strategy *strategy)
{
this->strategy = strategy;
}
void test_encrypt()
{
strategy->crypt();
}
protected:
private:
Strategy *strategy;
};
void main()
{
Strategy *strategy = NULL;
//strategy = new DES;
strategy = new AES;
Context *context = new Context;
context->setStrategy(strategy);
context->test_encrypt();
delete strategy;
delete context;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 策略模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180918
##################################################################
class Strategy(object):
def crypt(self):
pass
class AES(Strategy):
def crypt(self):
print("AES encrypt")
class DES(Strategy):
def crypt(self):
print("DES encrypt")
class Context(object):
def __init__(self):
self.m_strategy = None
def test_encrypt(self):
self.m_strategy.crypt()
if __name__ == "__main__":
strategy = DES()
#strategy = AES()
context = Context()
context.m_strategy = strategy
context.test_encrypt()