Borg模式还是只是带函数的模块
4 个回答
3
这段话的意思是,Borg模式和模块的区别在于,Borg模式会有多个对象,它们的属性是一样的;而使用模块的方式则只有一个对象(就是这个模块本身)。
另外,对象和模块其实有点不同:你不能把模块进行序列化(也就是不能把它保存成文件),但你可以对类进行序列化。而且,你可以对对象进行一些操作,比如比较大小(>、<)或者进行加减法(+、-)等。
稍微偏题一点:通过一些修改,Borg模式也可以用作一种非常简单的Multiton模式。
class Multiton(object):
__shared_states = {}
def __init__(self, name):
if not self.__shared_states.has_key(name):
self.__shared_states[name] = {}
self.__dict__ = self.__shared_states[name]
3
单例模式和模块在整个应用程序的生命周期内只会有一个实例。这种实例会一直存在,即使在不需要的时候也不会消失。
而博格模式则是关于共享状态的。每个使用这个博格的类都会创建一个新的实例,但当这个实例不再需要时,它会被销毁——这种方式更优雅。
除此之外,使用博格模式更容易进行子类化或模拟。