Chapter 4: Object-Oriented Programming II

以下内容仅供参考阅读

Class Method vs Instance Method

3. 效率的差别*

circle-info

Instance method必须要新建instance, 必须每次新建一个instance = Class.new(), 需要在内存当中存储这个instance的variable 以及 method的代码。有多少个instance就有多少这些东西。有一类class可以被认为是一个globally共享的toolbox,大家都可以用,没有必要每次都新建一个,逻辑对每个人都是一样的,那么内存中只需要存一开始的那段代码即可。

还是那个例子,我们想拿所有的Sticker, 我们一定要用instance method的话,我们也可以去class Sticker以外新建一个类,专门负责这件事情:

class StickerInventory
    def initialize()
    end

    def getAllStickers()
        ...
    end
end

inventory_for_april = StickerInventory.new()    #内存里增加了一个object
april_stickers = inventory_for_april.getAllStickers
...

# 可能在下一层函数里
inventory_for_james = StickerInventory.new()     #内存里又增加了一个object
james_stickers = inventory_for_james.getAllStickers

# 当然你可以用inventory = StickerInventory.new() 然后一直用同一个,但是需要传来传去会很麻烦
...

相比之下,

所以前者不仅要多写了一个class,而且运行效率还更低。

4. 进阶应用*

4.1 Factory method

4.2 Cache (Singleton)

如果每次都新建一个cache, 那么每次都是空的,不会有之前的数据。如果第一次建了之后就到处传,则显得非常乱,给每一层函数都增加了一个参数。更不用说下层函数无法给上层传。我们希望用class variable去document一个唯一的instance,是所有人所共享的。这就叫singleton。

那么为什么用这个全球唯一的instance,而不是干脆没有任何instance,直接用class variable存cache里的内容,然后用class method去访问呢?不也可以达到相同效果么?可以参考阅读:https://stackoverflow.com/questions/2969599/why-use-singleton-instead-of-static-classarrow-up-right

Last updated