2023年8月25日,周五上午
今天上午学习设计模式中的策略模式时,发现这个有点像很多卡通片里面的变身器...
#include<iostream>
//alien hero是外星英雄的意思
//在《少年骇客》中,主角可以通过变身器变成10种外星英雄
class AlienHero{
public:
//Shapeshift是变身的意思
virtual void Shapeshift()=0;
};
//变成超能兽
class Wildmutt:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!超能兽!"<<std::endl;
}
};
//变成四手霸王
class FourArms:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!四手霸王!"<<std::endl;
}
};
//变成小奇兵
class GreyMatter:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!小奇兵!"<<std::endl;
}
};
//变成快闪之星
class Kineceleran:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!快闪之星!"<<std::endl;
}
};
//主角手上那个手表变身器就叫Omnitrix
class Omnitrix{
AlienHero *ah;
public:
Omnitrix(AlienHero *ah){
this->ah=ah;
}
//在手表变身器上选好英雄后,按下手表变身器中间的按钮变身!
void push(){
ah->Shapeshift();
}
};
int main(){
//变身超能兽!!!
Omnitrix omx(new Wildmutt());
omx.push();
}
使用策略模式的好处是,
当我需要添加一种新的外星英雄——Upgrade(变形怪)时,
我不需要改动里面的任何代码,只需要基于抽象类AlienHero再添加一个新类Upgrade就可以了。
#include<iostream>
//alien hero是外星英雄的意思
//在《少年骇客》中,主角可以通过变身器变成10种外星英雄
class AlienHero{
public:
//Shapeshift是变身的意思
virtual void Shapeshift()=0;
};
//变成超能兽
class Wildmutt:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!超能兽!"<<std::endl;
}
};
//变成四手霸王
class FourArms:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!四手霸王!"<<std::endl;
}
};
//变成小奇兵
class GreyMatter:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!小奇兵!"<<std::endl;
}
};
//变成快闪之星
class Kineceleran:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!快闪之星!"<<std::endl;
}
};
//*******************************
// 新添加的类
//********************************
//变成变形怪
class Upgrade:public AlienHero{
public:
void Shapeshift(){
std::cout<<"变身!变形怪!"<<std::endl;
}
};
//主角手上那个手表变身器就叫Omnitrix
class Omnitrix{
AlienHero *ah;
public:
Omnitrix(AlienHero *ah){
this->ah=ah;
}
//在手表变身器上选好英雄后,按下手表变身器中间的按钮变身!
void push(){
ah->Shapeshift();
}
};
int main(){
//变身变形怪!!!
Omnitrix omx(new Upgrade());
omx.push();
}