评论

收藏

[C++] 令狐冲之独孤九剑篇--策略模式

编程语言 编程语言 发布于:2021-11-15 13:41 | 阅读数:544 | 评论:0

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

关注下面的标签,发现更多相似文章