在愤怒的心开始指责单例模式和相关做法之前,或者用理论上的批评来批评这个问题之前,我声明这个问题代表了现实生活中的一个现实问题,需要一些有头脑和常识的人进行分析。< / p>
此外,在开始提出技术答案和评论之前,我指定这与实施无关。根据参与规则,我的图书馆做得很好,我没有在寻找其他可能的解决方案。
管理UI组件时,有些组件必须是唯一的。
例如,对话框窗口必须由其他不同组件访问和使用,以达到通知用户或提出一些选项或交互作用的目的。
对话框需要其自己的配置设置,该设置必须在实例化时提供,例如用于识别按下哪个选项按钮的CSS类,用于特定事件(例如最小化,最大化,关闭)的处理程序等等。
var options = {
confirmOption: '.confirm-btn',
cancelOption: '.cancel-btn',
maximize: function(dialog) {
$('.long-message').show();
}
};
如果这是一个允许多个实例的普通类,并且符合扩展和一致的语法,我会这样做:
var dialog = new Dialog(options);
由于Dialog
类是单例,因此使用new
关键字进行实例化会引发错误,因为这是逻辑上期望的,而必须使用正确的getInstance
方法:< / p>
var dialog = Dialog.getInstance();
由于应在构造时传递选项,因此语法变为:
var dialog = Dialog.getInstance(options);
我知道很多人会大吃一惊,而纯粹主义者可能会说它并没有描述一个不变的类,因为获取带有或不带有参数的实例会陷入不同的境地。
我的意思是:
getInstance
的可能参数将被忽略,因为已经设置了内部成员,从而节省了必须是不变的设置的可能覆盖; 您对这种情况有什么看法?
您会接受这种语法吗?
如果没有,您将使用哪种语法尝试生成可读代码,以遵守单例约束和设置配置设置的可能性?