享元
享元模式用于对大量细粒度对象的支持。一个应用中如果使用了大量的对象,会造成很大的存储开销。由于享元对象可以被共享,所以可以使用相对较少的享元对象来替代组对象。
以下给出一个享元模式的示例,读者可以在交互式解释器中实验来体会享元模式的用途。
import weakref
class Card(object):
_CardPool = weakref.WeakValueDictionary()
def __new__(cls, value, suit):
obj = Card._CardPool.get(value + suit, None)
if not obj:
obj = object.__new__(cls)
Card._CardPool[value + suit] = obj
obj.value, obj.suit = value, suit
return obj
def __str__(self):
return "Card: {0} {1}".format(self.value, self.suit)
c1 = Card('1', 'h')
c2 = Card('2', 'h')
print(c1 == c2)
print(id(c1), id(c2))