具有参数的Singleton构造函数(JavaScript)

时间:2018-08-01 11:23:05

标签: javascript oop singleton readability

前提

在愤怒的心开始指责单例模式和相关做法之前,或者用理论上的批评来批评这个问题之前,我声明这个问题代表了现实生活中的一个现实问题,需要一些有头脑和常识的人进行分析。< / 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的可能参数将被忽略,因为已经设置了内部成员,从而节省了必须是不变的设置的可能覆盖;
  • 不影响对象一致性的类的内部成员,可以通过适当的方法进行编辑。

您对这种情况有什么看法?

您会接受这种语法吗?

如果没有,您将使用哪种语法尝试生成可读代码,以遵守单例约束和设置配置设置的可能性?

0 个答案:

没有答案