使用单例与模型的缺点

时间:2018-01-27 18:07:35

标签: javascript design-patterns

所以,假设我正在制作一个用于处理库的React Redux应用程序。我想为我的后端创建一个API,其中每个模型(书籍,作者等)都显示在UI中。 每个模型都不提供公共构造函数,而是提供一个静态函数,它确保每个id只存在一个实例:

function get_suggestion_array_from_object(searchstring, current_object) {
  var suggestion_array = [];
  console.log(current_object);
}

var test_searchstring = 'Ma';
var test_current_object_string = '{"r":{"k":0,"y":0}}';

var test_current_object = JSON.parse(test_current_object_string);

get_suggestion_array_from_object(test_searchstring, test_current_object);

每个模型都提供异步获取功能,该功能将使用后端获取其道具。优点是没有数千个实例,我也不需要两次获取(如果我的应用程序的两个部分需要相同的模型,则实际上只会调用一次获取)。但是我没有发现任何缺点,除了在获取模型的代码和假设它们仍然没有获取的代码之间可能存在差异,但我仍然不知道什么时候它真的会成为问题

2 个答案:

答案 0 :(得分:1)

我可以想到两个问题:

  • 你的模特是否可变?如果更改实例的属性,它将反映使用该实例的所有位置。这可能是可取的,或者根本不是。使用from方法,你无法做任何事情。
    如果您的模型是不可变的,那么共享实例实际上是一种常见做法,也称为hash consing
  • 你的实现会像地狱一样泄漏内存。即使不再需要这些实例,实例也将继续从books数组/对象引用。

答案 1 :(得分:1)

  

但我没有发现任何缺点

我至少看到两个:

  • 单身模式是反模式 静态工厂方法不提供显式依赖性 在单元测试中模拟方法或切换到另一个实现将更难。

  • 您没有缓存大小限制 对于简短列表,没关系。 但是,如果您可以缓存许多对象,则应该只保留最近使用过的最后一个实例。