`
dotcpp
  • 浏览: 60158 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

我看设计模式系列(2)--策略模式【设计模式C++实现】

阅读更多

先看一下策略模式的UML类图:

 

从类图可以看出,策略模式基本和简单工厂模式没什么区别,从我的理解他们两个最大的区别就是:简单工厂模式是实现对象的多样性,而策略模式适合类中的成员以方法为主; 简单工厂模式只能解决对象创建问题,对于经常变动的算法应使用策略模式。

 

放代码看看吧:

//策略基类
class COperation
{
public:
	int m_nFirst;
	int m_nSecond;
	virtual double GetResult()
	{
		double dResult=0;
		return dResult;
	}
};

//策略具体类—加法类
class AddOperation : public COperation
{
public:
	AddOperation(int a,int b)
	{
		m_nFirst=a;
		m_nSecond=b;
	}
	virtual double GetResult()
	{
		return m_nFirst+m_nSecond;
	}
};

class Context
{
private:
	COperation* op;
public:
        Context(COperation* temp)
	{
        op=temp;
	}
	double GetResult()
	{
		return op->GetResult();
	}
};

//客户端
int main()
{
    int a,b;
    char c;
    cin>>a>>b;
  cout<<”请输入运算符:;
    cin>>c;
    switch(c)
    {
    case ‘+’:
	    Context *context=new Context(new AddOperation(a,b));
	    cout<<context->GetResult()<<endl;
            break;
   default:
            break;
     }
     return 0;
}

   为了方便,我这里只放了一个加法类,你可以自己继承一个减法、乘法等,然后在主函数switch里面添加相关的分类。我想到这里,大家也看到了策略方法的缺点 将对操作的判断全部放在了客户端,增加了客户的任务。

   大家知道,简单工厂模式正好是把判断操作都集中到工厂类里,于是可以想到将两个模式结合,就出现了下面的模式----策略与工厂结合模式,代码在上面代码的基础上修改:

class Context
{
private:
	COperation* op;
public:
    Context(char cType)
	{
            switch (cType)
            {
		case '+':
			op=new AddOperation(3,8);
			break;
		default:
			op=new AddOperation();
			break;
             }
	}
	double GetResult()
	{
		return op->GetResult();
	}
};
//客户端
int main()
{
	int a,b;
	cin>>a>>b;
	Context *test=new Context('+');
	cout<<test->GetResult()<<endl;
	return 0;
}
分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    C++实现源码提供了具体编程环境下的应用实例,帮助读者更好地理解和应用这些设计模式。通过阅读和实践这些源码,开发者可以更深入地掌握如何在实际项目中灵活运用设计模式,提升代码质量和可维护性。

    《大话设计模式》C++实现-design-patterns-cpp.zip

    《大话设计模式》C++实现-design-patterns-cpp

    设计模式实例--C++实现

    接下来,让我们看看"常见设计模式的解析和实现(C++)"这个压缩包中的内容。它很可能包含了对各种设计模式的详细解释,以及每种模式在C++中的具体代码示例。例如,可能会有一个关于工厂模式的章节,解释了如何使用静态...

    设计模式-策略模式-c++版

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C++中,策略模式主要用于封装一系列算法,并让它们之间可以互相替换,使得算法的变化独立于使用算法的客户。这种模式通常涉及三个主要角色:策略...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    C++设计模式实现--Observe

    **C++设计模式实现——观察者模式(Observe)** 观察者模式,也称为发布-订阅模式或事件监听模式,是软件设计模式中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    《设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版》是一份深入探讨软件工程中经典设计模式的重要资料,涵盖了面向对象编程中的核心设计原则和实践。这份资源主要关注GoF(Gang of Four,即《设计模式:可...

    设计模式详解及c++代码实现

    本文将详细解析23种经典的设计模式,并结合C++语言在Visual C++ 6.0环境下进行代码实现。我们将探讨抽象工厂(Abstract Factory)、装饰者(Decorator)和工厂方法(Factory Method)这三种重要的设计模式。 首先,...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决方案。在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来...

Global site tag (gtag.js) - Google Analytics