Multiton
The multiton pattern is a design pattern which generalizes the singleton pattern. Whereas the singleton allows only one instance of a class to be created, the multiton pattern allows for the controlled creation of multiple instances, which it manages through the use of a map.
- Description
- Task
Implement a basic Multiton class or other structure and test that it works as intended. If your language does not support the object oriented paradigm, then try to emulate a multiton as best you can with the tools available.
If your language supports multithreading, then you may optionally implement a thread safe variant as well.
- Related task
Wren
This more or less follows the lines of the C# example in the linked Wikipedia article.
Although all Wren code runs within the context of a fiber (of which there can be thousands) only one fiber can run at a time and so the language is effectively single threaded. Thread-safety is therefore never an issue. <lang ecmascript>import "/dynamic" for Enum
var MultitonType = Enum.create("MultitonType", ["zero", "one", "two"])
class Multiton {
// private constructor construct new_(type) { _type = type }
static getInstance(type) { if (!(0...MultitonType.members.count).contains(type)) { Fiber.abort("Invalid MultitonType member.") } if (!__instances) __instances = {} if (!__instances.containsKey(type)) __instances[type] = new_(type) return __instances[type] }
type { _type }
toString { MultitonType.members[_type] }
}
var m0 = Multiton.getInstance(MultitonType.zero) var m1 = Multiton.getInstance(MultitonType.one) var m2 = Multiton.getInstance(MultitonType.two)
System.print(m0) System.print(m1) System.print(m2)
var m3 = Multiton.getInstance(3) // produces an error</lang>
- Output:
zero one two Invalid MultitonType member. [./multiton line 13] in getInstance(_) [./multiton line 33] in (script)