-
Notifications
You must be signed in to change notification settings - Fork 3
/
ObjectFactory.winxed
42 lines (38 loc) · 1.64 KB
/
ObjectFactory.winxed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* A generic object factory type which serves as the basis for other
factory types. A factory must provide a "create" method, which returns
an object of the type which the factory is responsible for. Also, the
factory should provide a "create_typed" method, to attempt creating
an object of a different, albeit related, type (such as a subclass).
This is the base class for other factory-like classes in Rosella. This class
can be used directly as a generic factory type or it can be subclassed.
*/
class Rosella.ObjectFactory
{
var target_type;
function ObjectFactory(var target_type [optional], int has_type [opt_flag])
{
if (has_type)
self.target_type = target_type;
else
self.target_type = null;
}
// If the default target type is set, call .create_typed with it.
// Otherwise, throw an error.
function create(var pos [slurpy], var named [slurpy,named])
{
if (self.target_type != null)
return self.create_typed(self.target_type, pos:[flat], named:[flat,named]);
Rosella.Error.invalid(__FUNCTION__,
"Cannot create an object without a type.\n" +
"You must provide a type to create_typed or pass one to the " +
"constructor for ObjectFactory"
);
}
// Create an object given a type and a list of parameters. The default
// behavior is to pass the given parameters to the object constructor.
// subclasses may do something different
function create_typed(var type, var pos [slurpy], var named [slurpy,named])
{
return Rosella.construct(type, pos:[flat], named:[flat,named]);
}
}