23种设计模式之(十六)策略模式(python_c++实现)

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()




源码链接

设计模式(十六)策略模式示例代码(python–c++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值