策略模式
《独孤九剑》在金庸小说《神雕侠侣》、《笑傲江湖》中提到 为「剑魔」独孤求败所创,以无招胜有招,杀尽仇寇,败尽英 雄,天下更无抗手,唯隐居深谷以雕为友,『呜呼!群雄束手,长剑空利,不亦悲夫!生平欲求敌手,而不可得,诚寂寥难堪也』最后埋剑空谷,茕茕了此一生。
做技术的多么渴望这种状态,慢慢磨炼自己的功夫,笔者少年也是个功夫迷,并且相信轻功的存在,学校中,反复跳上乒乓球台,锤炼轻功;村子里,来回助跑,废弃的老墙蹬倒了好几堵。
现在做技术了,这种心态还在,感觉只要不停的学习锤炼,就能疾风快马,仗剑天涯。
本系列为新编系列,通过武侠小说,《西游记》,《龙珠》等门派关系,师徒关系,功夫继承,来解释设计模式,而且代码极简,以表达设计模式的思想为主。
场景:《独孤九剑》分为九种剑术,这里列举三种作为三种子类,这三种类都属于继承自《独孤九剑》类
Book_up <<独孤九剑>>
Book_A <<破剑术>>
Book_B <<破暗器术>>
Book_C <<破刀术>>
Fox_punching:令狐冲
Exe : Strategy.o
g++ -o Exe Strategy.o
main.o : Strategy.cpp
g++ -g -c Strategy.cpp
clean :
rm Strategy
#include <iostream>
#include <string>
using namespace std;
//策略模式
enum Type
{
A,
B,
C
};
class Book_up //<<独孤九剑>>
{
public:
virtual void show_skill() = 0;
};
class Book_A : public Book_up
{
public:
void show_skill();
};
void Book_A::show_skill()
{
cout << "Sword breaking skill" << endl;
}
class Book_B : public Book_up
{
public:
void show_skill();
};
void Book_B::show_skill()
{
cout << "Hidden weapon breaking skill" << endl;
}
class Book_C : public Book_up
{
public:
void show_skill();
};
void Book_C::show_skill()
{
cout << "knife breaking skill" << endl;
}
class Fox_punching
{
public:
Book_up* p_Bool_up = NULL; //<<独孤九剑>>
Book_A* p_Book_A = NULL; //<<破剑术>>
Book_B* p_Book_B = NULL;//<<破暗器术>>
Book_C* p_Book_C = NULL;//<<破刀术>>
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 << "be careful" << endl;
p_Bool_up->show_skill();
}
int main(void)
{
//<<破剑术>>
Fox_punching* p_Fox_punching = new Fox_punching;
p_Fox_punching->read_book(Type::A);
p_Fox_punching->throw_skill();
//<<破暗器术>>
p_Fox_punching->read_book(Type::B);
p_Fox_punching->throw_skill();
//<<破刀术>>
p_Fox_punching->read_book(Type::C);
p_Fox_punching->throw_skill();
delete p_Fox_punching;
return 0;
}
哎呦喂ヾ(✿゚▽゚)ノ~路长馆小,雪轻帘薄,酒热乎,这位爷~您ヾ(✿゚▽゚)ノ~ 里面坐~
本公众号专注分享C++,ffmpeg,opencv等相关音视频知识
webrtc,udp,tcp,rtsp,rtmp,srt/nginx+rtmp等流媒体协议和服务器
同时也会有大厂音视频技术专家不定期直播分享…
国人开发流媒体srs服务器,及yangrtc(国人版的webrtc)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!