设计模式-工厂模式

学习笔记:工厂模式
模式简介

:属于创建型模式,也是最常用的模式,使用一个总的接口管理方法。

为什么用

:只需申请一个对象,就能根据自己的需要,实现调用不同的方法,真是快乐。

怎么样用


(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值