栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

游戏开发设计模式 factory

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

游戏开发设计模式 factory

属于是对象创建模式的一种,这类模式的特点是:用虚函数运行时依赖的特点创建对象,绕开new,避免对象创建(new)过程的紧耦合。通常是接口抽象后的第一步工作。
定义一个用于创建对象的接口(侯捷课上说的,就是相当于重写一个支持多态的new方法)让子类决定实例化哪一个类。Factory_method就启到了一个让类的实例化延迟的作用。

就是有个虚函数 (参数就肯定相同了),用的时候根据传来的工厂判断要生产的是什么东西。
工厂模式有效的解决了添加新产品必须要修改工厂类代码的问题,新增一种武器只需要新增一个武器类型的工厂即可,符合开闭原则。
工厂模式的本质是将具体的创建工作放在了具体子类的工厂中进行

#pragma once
//多态创建对象所需要的参数形式必须是相同的
//产品基类
template
class base_weapon {
public:
	virtual void describe() {

	}
	virtual ~base_weapon() {}
};
//工厂基类
template
class base_weapon_factory {
public:
	virtual base_weapon* create() = 0;//这里的=0意思是纯虚函数,不然的话编译的时候会要求返回值不能为空
	virtual ~base_weapon_factory() {}
};

//concrete产品
template
class concrete_weapon1 :public base_weapon {
public:
	virtual void describe() {
		cout << "我是一把一类型武器" << endl;
	}
};

template
class concrete_weapon2 :public base_weapon {
public:
	virtual void describe() {
		cout << "我是一把二类型武器" << endl;
	}
};

//concrete工厂
template
class weapon1_factory :public base_weapon_factory {
public:
	virtual base_weapon* create() {
		return new concrete_weapon1;
	}
};

template
class weapon2_factory :public base_weapon_factory {
public:
	virtual base_weapon* create() {
		return new concrete_weapon2;
	}
};

//测试用的
template
class Test_factory_use {
public:
	base_weapon_factory* factory;
	Test_factory_use(base_weapon_factory* fac) :factory(fac) {}//这就要求外界要知道要传啥工厂进去
	void Test_make_a_weapon() {
		base_weapon* unkown_weapon= factory->create();
		unkown_weapon->describe();
	}
};

接口

//测试工厂模板方法
	cout << "测试factory_method方法" << endl;
	weapon1_factory* Weapon1_factory1 = new weapon1_factory;//这是要传进去的工厂
	Test_factory_use* Test_factory = new Test_factory_use(Weapon1_factory1);
	Test_factory->Test_make_a_weapon();

http://dingxiaowei.cn/2017/05/14/参考

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号