Class design


#1

How do I design a class such that it can never be instantiated? Say
for example a class containing static members alone, which requires no
instantiation!


#2

On 25.12.2006 20:54, Spitfire wrote:

How do I design a class such that it can never be instantiated? Say
for example a class containing static members alone, which requires no
instantiation!

You can apply some tactics to make it harder but AFAIK there is no safe
way to completely prevent instantiation. Typically something like this
will suffice

class Foo
def self.new(*a,&b) raise “Must not instantiate!” end
end

irb(main):004:0> Foo.new
RuntimeError: Must not instantiate!
from (irb):2:in `new’
from (irb):4
from :0

Other than that you can also use module Singleton, which is probably
better documentation wise:

irb(main):005:0> require ‘singleton’
=> true
irb(main):006:0> class Bar
irb(main):007:1> include Singleton
irb(main):008:1> end
=> Bar
irb(main):009:0> Bar.new
NoMethodError: private method `new’ called for Bar:Class
from (irb):9
from :0

Kind regards

robert

#3

On Dec 25, 2006, at 1:55 PM, Spitfire wrote:

How do I design a class such that it can never be instantiated?
Say for example a class containing static members alone, which
requires no instantiation!

Just use a module for this:

module Static

… defined constants and methods here …

end

James Edward G. II