A reusable aspect that forces singleton behavior on a constructor. The constructor is defined by a
pointcut spec: a string. regexp, or code ref.
It is slightly different from "Class::Singleton"
(<http://search.cpan.org/~abw/Class-Singleton/Singleton.pm>):
• No specific name requirement on the constructor for the external interface, or for the implementation
("Class::Singleton" requires clients use "instance()", and that subclasses override
"_new_instance()"). With aspects, you can change the cardinality of your objects without changing the
clients, or the objects themselves.
• No need to inherit from anything- use pointcuts to specify the constructors you want to memoize.
Instead of pulling singleton behavior from a base class, you are pushing it in, using the aspect.
• No package variable or method is added to the callers namespace
Note that this is just a special case of memoizing.