学习笔记:工厂模式
模式简介
:属于创建型模式,也是最常用的模式,使用一个总的接口管理方法。
为什么用
:只需申请一个对象,就能根据自己的需要,实现调用不同的方法,真是快乐。
怎么样用
:
(1)先写一个父类,里面放个待实现的函数,再写一堆子类,实现父类的那个函数,这样,申请一个父类对象,赋上子类的值,就能从父类调用不同的子类方法。
(2)再把这个封装一下,写个Factory类,里面写个返回值为父类,参数是字符串的函数,具体内容:根据不同的字符串的值返回不同的子类对象。因为子类可以赋值给父类嘛,然后就这样实现了工厂模式。
注意事项
:挺好用的一个模式,记得子类要实现相应的方法就行了。当然c++是使用指针实现多态。
实际举例
:实现角色使用技能功能
#include <iostream>
using namespace std;
//父类技能
class Skill {
public:
virtual void attack() {
cout << "待实现的技能攻击\n";
};
};
//子类技能
class SubSkill_1 : public Skill {
void attack() {
cout << "moota:发动重击,攻击了怪物\n";
};
};
class SubSkill_2 : public Skill {
void attack() {
cout << "moota:发动三连击,攻击了怪物\n";
};
};
class SubSkill_3 : public Skill {
void attack() {
cout << "moota:发动反击,攻击了怪物\n";
};
};
//技能工厂
class SkillFactory {
public:
//待使用技能
Skill* skill;
//通过技能名设置待使用技能并返回技能
Skill* getSkill(string name) {
if (name == "重击") {
skill=new SubSkill_1() ;
}
else if (name == "三连击") {
skill = new SubSkill_2();
}
else if (name == "反击") {
skill = new SubSkill_3();
}
else {
skill = new Skill();
}
return skill;
}
};
int main()
{
//技能库
SkillFactory skillFactory;
//待使用技能
Skill* skill;
//从技能库获得技能
skill = skillFactory.getSkill("重击");
//使用技能
skill->attack();
//其他测试
skill = skillFactory.getSkill("三连击");
skill->attack();
skill = skillFactory.getSkill("反击");
skill->attack();
return 0;
}