首页 > 其他分享 >设计模式之Strategy

设计模式之Strategy

时间:2023-08-29 10:05:29浏览次数:35  
标签:CConcreteStrategyA CContext Strategy CStrategy str 设计模式 con


Strategy.h



#ifndef _STRATEGY_H_
#define _STRATEGY_H_
class CStrategy
{
public:
	CStrategy();
	virtual~CStrategy();
	virtual void AlgrithmInterface()=0;
};

class CConcreteStrategyA:public CStrategy
{
public:
	CConcreteStrategyA();
	~CConcreteStrategyA();
	void AlgrithmInterface();
};

class CConcreteStrategyB:public CStrategy
{
public:
	CConcreteStrategyB();
	~CConcreteStrategyB();
	void AlgrithmInterface();
}; 

class CContext
{
public:
	CContext(CStrategy *_str);
	~CContext();
	void ContextAlgrithmInterface();
private:
	CStrategy *_str;

};
#endif



Strategy.cpp
#include <iostream>
#include "Strategy.h"
using namespace std;
CStrategy::CStrategy()
{

}

CStrategy::~CStrategy()
{

}

CConcreteStrategyA::CConcreteStrategyA()
{

}

CConcreteStrategyA::~CConcreteStrategyA()
{

}

void CConcreteStrategyA::AlgrithmInterface()
{
	cout<<"CConcreteStrategyA"<<endl;
}

CConcreteStrategyB::CConcreteStrategyB()
{

}

CConcreteStrategyB::~CConcreteStrategyB()
{

}

void CConcreteStrategyB::AlgrithmInterface()
{
	cout<<"CConcreteStrategyB"<<endl;
}

CContext::CContext(CStrategy *_str)
{
	this->_str=_str;
}

CContext::~CContext()
{

if(_str)
{
    delete  _str;
    _str=0;
}


}void CContext::ContextAlgrithmInterface(){if(_str)_str->AlgrithmInterface();}

Main.cpp


#include <iostream>
#include "Strategy.h"
using namespace std;

int main() //Client
{
	CStrategy *_str=new CConcreteStrategyA;
	CContext  *_con=new CContext(_str);
	_con->ContextAlgrithmInterface();
	if(_str)
	{
		delete _str;
		_str=0;
	}

	if(_con)
	{
		delete _con;
		_con=0;
	}
	return 0;
}


Strategy模式和Template模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现




Main.cpp

#include <iostream>
#include "Strategy.h"
using namespace std;

int main() //Client
{
	CStrategy *_str=new CConcreteStrategyA;
	CContext  *_con=new CContext(_str);
	_con->ContextAlgrithmInterface();
	if(_str)
	{
		delete _str;
		_str=0;
	}

	if(_con)
	{
		delete _con;
		_con=0;
	}
	return 0;
}
Strategy模式和Template模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现

标签:CConcreteStrategyA,CContext,Strategy,CStrategy,str,设计模式,con
From: https://blog.51cto.com/u_13566975/7272471

相关文章

  • 设计模式之Prototype模式
    关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(CopyConstr......
  • 设计模式之Factory模式
    在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象......
  • 设计模式——工厂模式
    ★★★原文链接★★★:https://subingwen.cn/design-patterns/factory/工厂模式简单工厂  工厂和对象的关系:一对多工厂模式  工厂和对象的关系:一对一示例:#include<iostream>usingnamespacestd;//产品类的父类-人造恶魔果实父类classAbstractSmile{public: v......
  • 设计模式——简单工厂模式
    简单工厂模式详细介绍请见:★★★原文链接★★★:https://subingwen.cn/design-patterns/simple-factory/对于简单工厂模式,工厂类有且仅有一个 简单工厂模式示例:#include<iostream>usingnamespacestd;//产品类的父类-人造恶魔果实父类classAbstractSmile{pub......
  • 【23种设计模式】工厂方法模式(二)
    ****##前言在讲述之工厂方法模式前,我们来先了解简单工厂模式,简单工厂模式是最简单的设计模式之一,它虽然不属于GoF的23种设计模式,但是应用也较为频繁,同时它也是学习其他创建型模式的基础。下面我们来先了解下简单工厂模式,然后针对它的缺点来引出工厂方法模式。简单工厂方法定义......
  • 19 迭代器模式 -- go语言设计模式
    迭代器模式是一种行为型设计模式,它允许我们在不暴露聚合对象内部结构的情况下,遍历其中的元素。在这种模式下,我们使用迭代器对象来遍历聚合对象中的元素。迭代器模式的实现代码packagemainimport("fmt")//定义一个迭代器接口typeIteratorinterface{HasNext......
  • 设计模式学习笔记——接口隔离原则
    定义:1、客户端不应该依赖于它不需要的接口2、类间的依赖关系应该建立在最小的接口上通俗的讲,应该建立单一的接口,不要建立臃肿庞大的接口,即接口应该尽量细化,同时接口中的方法尽量少。举例:要成为一名美女必须具备三个条件:面貌、身材、气质,星探找美女的过程如下类图所示:IPrettyGirl接......
  • 设计模式学习笔记——创建者模式
    这个模式也是比较难理解的,我看了《设计模式之禅》上讲解的例子,但是看完之后一头雾水,而且好乱,仍然没有理解,看了好几遍,还是没有理解,于是我又去翻开我的课本,看那上面的例子,但是结果依然。于是上网搜,搜了很多,但是都不是很理想,最终功夫不负有心人,终于找到一个我能理解,而且我认为比较合理......
  • 【23种设计模式】设计模式综述(开篇)
    一、设计模式概述:​设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。是一套被反复使用......
  • 【23种设计模式】单例模式(一)
    前言:单例模式是创建型模式5种中的第1种,关注对象的创建,保证一个类仅有一个实例,并且提供一个全局访问点。在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只......