The Single Responsibility Principle is one of the
fundamentals of object-oriented programming. In essence, it states that a
class or module should never have more than one reason to change. The more
things a class or module is charge of, the more kinds of change the class is
affected by. You can learn more about this and other related principles in my Principles
of Object Oriented Design course on PluralSight On Demand. Also be sure to
check out the Software Craftsmanship 2011 Calendar,
which includes SRP and 11 other important principles of writing better software
and makes a great addition to your team room.
In the case of the Singleton pattern, the class is being
given the extra responsibility, above and beyond whatever it actually does, of
managing how many instances of itself are allowed to exist within the
application. This additional responsibility clearly violates SRP, and
especially since there are so many ways to implement the Singleton pattern, and
so many of these have negative consequences, my advice is to move the
responsibility of managing the object's lifetime to a separate class with just
this responsibility. The simplest way to achieve this is through the use of an
Inversion of Control Container, or IOC Container.