Factory Class Question

  • Thread starter Thread starter Jason MacKenzie
  • Start date Start date
J

Jason MacKenzie

Is there a way to prevent classes from being instantiated by methods other
than my factory pattern?

I have a couple of classes and want to force the factory class to be used as
the "entry point".

Any help is appreciated,

Jason MacKenzie
 
Jason,
The "easiest" way is to make the constructor private which will only allow
the class itself to create an instance.

This unfortunately will not prevent creating an instance via reflection &
Activator.CreateInstance... Using Activator.CreateInstance to create an
instance of a class with a private constructor is rare, however it is
possible.

Hope this helps
Jay
 
Jay - thanks for the response.

Here is what I have right now:

I have a base class called Employee

I have 2 derived classes based on Employee called Facilty1_Employee and
Facilty2_Employee

I have a factory class that has a function that returns Employee and will
instatiate Facility1 or 2 depending on a setting in the registry.

Facility2_Employee has an overloaded constructor which means I can't make it
private (as far as I know).

Facilty1_employee takes one argument in its constructor as well which means
I can't make that private.

Should I be setting properties instead of using passing arguments to the
constructors to accomplish what I'm trying to do?

Thanks a million,

Jason MacKenzie
 
Jason,
Seeing as you have parameterized constructors, the "easiest" way may be to
move EmployeeFactory, Employee, Facilty1Employee, and Facilty2Employee all
to their own class library, then make the constructors of Employee,
Facilty1Employee, and Facilty2Employee as Friend. Which means that only that
assembly will be able to instantiate the classes. I would make
EmployeeFactory a not inheritable class with a private constructor, which
prevents others from inheriting from it or creating an instance of it.

I normally do not create both a EmployeeFactory class and Employee class,
instead I put the factory method as a shared member of Empoyee.

Hope this helps
Jay
 
That helps out immensely. Thank you very much.

Jay B. Harlow said:
Jason,
Seeing as you have parameterized constructors, the "easiest" way may be to
move EmployeeFactory, Employee, Facilty1Employee, and Facilty2Employee all
to their own class library, then make the constructors of Employee,
Facilty1Employee, and Facilty2Employee as Friend. Which means that only
that assembly will be able to instantiate the classes. I would make
EmployeeFactory a not inheritable class with a private constructor, which
prevents others from inheriting from it or creating an instance of it.

I normally do not create both a EmployeeFactory class and Employee class,
instead I put the factory method as a shared member of Empoyee.

Hope this helps
Jay
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top