三叶草 发表于 2021-11-15 13:41:36

令狐冲之独孤九剑篇--策略模式

策略模式
《独孤九剑》在金庸小说《神雕侠侣》、《笑傲江湖》中提到 为「剑魔」独孤求败所创,以无招胜有招,杀尽仇寇,败尽英 雄,天下更无抗手,唯隐居深谷以雕为友,『呜呼!群雄束手,长剑空利,不亦悲夫!生平欲求敌手,而不可得,诚寂寥难堪也』最后埋剑空谷,茕茕了此一生。
做技术的多么渴望这种状态,慢慢磨炼自己的功夫,笔者少年也是个功夫迷,并且相信轻功的存在,学校中,反复跳上乒乓球台,锤炼轻功;村子里,来回助跑,废弃的老墙蹬倒了好几堵。
现在做技术了,这种心态还在,感觉只要不停的学习锤炼,就能疾风快马,仗剑天涯。
本系列为新编系列,通过武侠小说,《西游记》,《龙珠》等门派关系,师徒关系,功夫继承,来解释设计模式,而且代码极简,以表达设计模式的思想为主。
上一篇:请添加链接描述
场景:《独孤九剑》分为九种剑术,这里列举三种作为三种子类,这三种类都属于继承自《独孤九剑》类
Book_up <<独孤九剑>>
Book_A<<破剑术>>
Book_B<<破暗器术>>
Book_C<<破刀术>>
Fox_punching:令狐冲
: Strategy.o
    g++ -o Exe Strategy.o
main.o : Strategy.cpp
    g++ -g -c Strategy.cpp
clean :
    rm Strategy#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

//策略模式

enum Type
{
A,
B,
C
};

class Book_up //&lt;&lt;独孤九剑&gt;&gt;
{
public:
    virtual void show_skill() = 0;
};

class Book_A : public Book_up
{
    public:
    void show_skill();
};
void Book_A::show_skill()
{
    cout &lt;&lt; "Sword breaking skill" &lt;&lt; endl;
}

class Book_B : public Book_up
{
public:
    void show_skill();
};
void Book_B::show_skill()
{
    cout &lt;&lt; "Hidden weapon breaking skill" &lt;&lt; endl;
}

class Book_C : public Book_up
{
public:
    void show_skill();
};
void Book_C::show_skill()
{
    cout &lt;&lt; "knife breaking skill" &lt;&lt; endl;
}

class Fox_punching
{
public:
    Book_up* p_Bool_up = NULL; //&lt;&lt;独孤九剑&gt;&gt;
    Book_A* p_Book_A = NULL; //&lt;&lt;破剑术&gt;&gt;
    Book_B* p_Book_B = NULL;//&lt;&lt;破暗器术&gt;&gt;
    Book_C* p_Book_C = NULL;//&lt;&lt;破刀术&gt;&gt;
    void read_book(Type type);
    void throw_skill();
    ~Fox_punching();
};
    Fox_punching::~Fox_punching()
    {
      if(p_Book_A != NULL)
      {
            delete p_Book_A;
      }
      if(p_Book_B != NULL)
      {
            delete p_Book_B;
      }
      if(p_Book_C != NULL)
      {
            delete p_Book_C;
      }
    }

void Fox_punching::read_book(Type type)
{
    if (type == A)
    {
      if (p_Book_A == NULL)
      {
            p_Bool_up = new Book_A;
      }
    }
    if(type == B)
    {
      if(p_Book_B == NULL)
      {
            p_Bool_up = new Book_B;
      }
    }
    if (type == C)
    {
      if (p_Book_C == NULL)
      {
            p_Bool_up = new Book_C;
      }
    }
}
void Fox_punching::throw_skill()
{
    cout &lt;&lt; "be careful" &lt;&lt; endl;
    p_Bool_up-&gt;show_skill();
}

int main(void)
{
    //&lt;&lt;破剑术&gt;&gt;
    Fox_punching* p_Fox_punching = new Fox_punching;
    p_Fox_punching-&gt;read_book(Type::A);
    p_Fox_punching-&gt;throw_skill();

    //&lt;&lt;破暗器术&gt;&gt;
    p_Fox_punching-&gt;read_book(Type::B);
    p_Fox_punching-&gt;throw_skill();

    //&lt;&lt;破刀术&gt;&gt;
    p_Fox_punching-&gt;read_book(Type::C);
    p_Fox_punching-&gt;throw_skill();

    delete p_Fox_punching;

    return 0;
}
            </div>
      
      <div id="asideoffset"></div>

https://blog.51cto.com/u_14338379/4593219
页: [1]
查看完整版本: 令狐冲之独孤九剑篇--策略模式