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

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

场景:《独孤九剑》分为九种剑术,这里列举三种作为三种子类,这三种类都属于继承自《独孤九剑》类
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)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/121327926