A . 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
B . 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
C . 当构造过程必须允许被构造的对象有不同的表示时
D . 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为