您的位置:首页 > 编程语言

设计模式--策略模式示例代码

2019-08-21 10:24 826 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/alzzw/article/details/99941479

策略模式:


    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化
 

适用性:

1,多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

2,需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

3,对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

优缺点:

优点:

1,策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复。

2,使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。

缺点:

1,客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。

2,由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。

和其他设计模式的区别:

1,与状态模式

在解决的问题上,状态模式是解决内在状态的改变,而策略模式是解决内部算法的改变。在解决的方法上,状态模式是自我控制状态的改变,而策略模式是由外部制定使用使用啥策略。

2,简单工厂模式

简单工厂模式是创建型模式,关注对象的创建。策略模式是行为型模式,关注行为的封装。简单工厂模式是根据不同的条件返回一个适合的类给你使用,然后调用者使用工厂类返回的类去完成相应的操作。而策略模式是必须首先创建一个想使用的类实例,然后实例被当作参数传递进去,既而通过该实例去调用不用的算法。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。

 

示例:

代码中:武器策略类(抽象武器类),具体武器类,玩家类

具体武器类实现功能,玩家只需要和武器策略打交道就ok,而不用去和具体武器联系

[code]

#include <iostream>
using namespace std;

//抽象武器  武器策略
class WeaponStrategy
{
public:
virtual void UseWeapon() = 0;
};

//匕首
class Knife : public WeaponStrategy
{
public:
virtual void UseWeapon()
{
cout << "匕首" << endl;
}
};

//AK
class AK47 : public WeaponStrategy
{
public:
virtual void UseWeapon()
{
cout << "AK47" << endl;
}
};

class Person
{
public:
void setWeapon(WeaponStrategy* Weapon)
{
this->pWeapon = Weapon;
}
void UseWeapon()
{
pWeapon->UseWeapon();
}
public:
WeaponStrategy* pWeapon;
};

void test()
{
Person* person = new Person;
WeaponStrategy* Ak47 = new AK47;
person->setWeapon(Ak47);
person->UseWeapon();
delete person;
delete Ak47;
}

int main()
{
test();
system("pause");
return 0;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: