设计模式复习-策略模式

本文复习了设计模式中的策略模式,它通过封装一系列算法,允许算法之间互换而不影响客户端。策略模式定义了一个行为接口,不同的算法实现该接口,客户端可以根据需求选择具体的算法实例进行操作。为了简化客户端的使用,可以通过工厂模式进一步优化策略类的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

        封装一系列算法,算法之间互相增加替换,不会影响到客户端,相当于是先定义一个统一接口,然后各个算法继承这个接口实现,然后,再层状一层逻辑调用,客户端只需要调用这个最后封装的类就好了,但是这样的话客户端在算法选择使用的时候需要自己实例化具体算法,所以可以考虑用工厂把这个策略类继续优化下即可。

实现代码(基本策略模式+工厂优化过的)

#pragma once
#include "stdafx.h"
#include<iostream>
#include<windows.h>
using namespace std;

//策略模式基本实现
class InterFace {
public:
	virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0;
};

class Addition : public InterFace {
public:
	DWORD getValue(const DWORD &numberA, const DWORD &numberB) {
		return numberA + numberB;
	}
};

class Subtrantion :public InterFace {
public:
	DWORD getValue(const DWORD &numberA, const DWORD &numberB) {
		return numberA - numberB;
	}
};

class Strategy {
private:
	InterFace *mpAlgorithm = NULL;
public:
	VOID setStrategy(InterFace *pAlgorithm) {
		mpAlgorithm = pAlgorithm;
	}
	DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {
		return mpAlgorithm->getValue(numberA , numberB);
	}
};


//策略模式客户端调用
int main()
{
	Strategy *pstrategy = new Strategy();
	InterFace *padditon = new Addition();
	InterFace *psubtrantion = new Subtrantion();

	pstrategy->setStrategy(padditon);
	cout<<pstrategy->runAlgorithm(1,1)<<endl;

	pstrategy->setStrategy(psubtrantion);
	cout << pstrategy->runAlgorithm(1, 1) << endl;

	delete pstrategy;
	delete padditon;
	delete psubtrantion;
	
	getchar();
	return 0;
}



#pragma once
#include "stdafx.h"
#include<iostream>
#include<windows.h>
using namespace std;

//工厂简单改下策略模式,减少客户端操作(选择)的复杂度
class InterFace {
public:
	virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0;
};

class Addition : public InterFace {
public:
	DWORD getValue(const DWORD &numberA, const DWORD &numberB) {
		return numberA + numberB;
	}
};

class Subtrantion :public InterFace {
public:
	DWORD getValue(const DWORD &numberA, const DWORD &numberB) {
		return numberA - numberB;
	}
};

class Strategy {
private:
	InterFace *mpNowAlgorithm = NULL;
	InterFace *mpCacheAlgorithm[2] = {NULL ,NULL};

public:
	Strategy() {
		mpCacheAlgorithm[0] = new Addition();
		mpCacheAlgorithm[1] = new Subtrantion();
	}
	VOID setStrategy(const DWORD &key) {
		switch (key) {
				case 0: 
					mpNowAlgorithm = mpCacheAlgorithm[0]; break;
				case 1:
					mpNowAlgorithm = mpCacheAlgorithm[1]; break;
				default:
					mpNowAlgorithm = NULL;
		}
	}
	~Strategy() {
		delete mpCacheAlgorithm[0];
		delete mpCacheAlgorithm[1];
	}

	DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {
		return mpNowAlgorithm->getValue(numberA , numberB);
	}
};


//策略模式客户端调用
int main()
{
	Strategy *pstrategy = new Strategy();

	pstrategy->setStrategy(0);
	cout<<pstrategy->runAlgorithm(1,1)<<endl;

	pstrategy->setStrategy(1);
	cout << pstrategy->runAlgorithm(1, 1) << endl;

	delete pstrategy;

	getchar();
	return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值