blob: 465ac186b0b2ed4792bc1f20ed17c3736c391eba [file] [log] [blame]
//
// Copyright 2014 Google Inc. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
//
part of charted.core.utils;
typedef T ObjectCreator<T>();
/// Provides a registry and factory service.
///
/// Registration:
/// ObjectFactory.register(“type”, () => { new TypeCreator(); });
///
/// Usage:
/// instance = ObjectFactory.create('type');
class ObjectFactory<T> {
Map<String, ObjectCreator<T>> _components = {};
/// Register a component [creator] for [name].
void register(String name, ObjectCreator<T> creator) {
_components[name] = creator;
}
/// Create an instance for [name].
T create(String name) {
if (!_components.containsKey(name)) {
throw new ArgumentError('Element $name not found in ComponentFactory');
}
var creator = _components[name], instance = creator();
if (instance == null) {
throw new ArgumentError('Component $name initialization failed.');
}
return instance;
}
}