我从来没有使用以前的工厂,原因很简单,我没有当我需要他们理解。我一直在一个小游戏在我的业余时间,我决定实施FMOD的声音。我看着设计的OpenAL(不同的声音设置)的包装,它看起来像...

SoundObject * SoundObjectManager * SoundObjectFactory *

在SoundObject基本上每个声音对象的实例。该SoundObjectManager只是管理所有这些对象。这是直截了当不够,使得很多的感觉,但我没有得到什么,工厂正在做或者它是干什么用的。我一直在读,厂区最多,但仍然没有真正得到他们。

任何帮助,将不胜感激!

有帮助吗?

解决方案

厂看作“虚拟构造函数”。它可以让你构造对象有一个共同的编译时间类型,但不同的运行类型。可以简单地通过告诉工厂创建不同的运行时类型的实例切换行为。

其他提示

当实现需要被参数工厂被使用。 FMOD是跨平台的,它需要决定什么具体的实施给你的平台。这就是工厂正在做什么。主要有两种模式抽象工厂模式和的工厂方法模式

假设情况:我写,我想在多个平台上运行的音色库。我会尽量让尽可能多的代码作为独立的可能是与平台的,但肯定它的一些需要更改Windows与OSX与Linux操作系统。

所以我写的所有这些不同的实现,但我不希望最终用户将不得不作出的及其的程序取决于Linux或Windows或什么的。我也不想保持4个不同的接口,以我的API。 (注意:这些都只是一些原因,你可能会创建一个工厂 - 当然也有其他情况)。

所以我定义这个漂亮的通用SoundObject基类,定义了所有的客户端获取使用的方法。然后,我让我的LinuxSoundObjectWindowsSoundObject,和另外5人来自SoundObject派生。但我要对用户隐藏所有这些具体的实现,只为他们提供一个SoundObject。相反,你要叫我SoundObjectFactory抓住这似乎你是一个普通的老SoundObject,但实际上我已经选择了正确的运行时类型为你和实例化它自己。

2年后,一个新的操作系统自带约和取代的Windows。而不是强迫你重写你的软件,我只更新我的图书馆,以支持新的平台,你再也看不到改变的接口。

这是所有相当做作,但希望你的想法。

工厂隔离什么运行时类型(即执行)的接口的消费者是真正被使用。

工厂可用于实现控制的反转,并从你的组件的逻辑分离实例化代码(“新的)。这是有用的,当你写单元测试,因为你可能不希望测试对象来创建一堆其他物体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top