单例模式、装饰器

单例模式:

单例模式(singleton),是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”

要点:

显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

单例模式的实现:

http://www.runoob.com/design-pattern/singleton-pattern.html

优点:

一、实例控制

单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

二、灵活性

因为类控制了实例化过程,所以类可以灵活更改实例化过程。

缺点:

一、开销

虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。

二、可能的开发混淆

使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

三、对象生存期

不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于 .NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用.


装饰器:

作用:

当我们想要改变函数的原有功能时,但不想/不能改变原来的函数,就可以通过装饰器解决

使用:

装饰器其实就是一个函数,该函数具有一个参数(函数类型),返回一个闭包
在闭包中调用传递进来的函数,然后就可以在调用函数的前后添加内容了。

示例:

def zhuangshiqi(func):
      def wrapper():
          print('前面的装饰')
          func()
          print('后面的装饰')
      return wrapper

  def test():
      print('for test')

  # t = zhuangshiqi(test)
  # t()

  test = zhuangshiqi(test)
  test()

  @zhuangshiqi
  # 上面的语法相当于:hello = zhuangshiqi(hello)
  def hello():
      print('How are you?')

  hello()  

装饰器的使用:

装饰无参无返回值的函数
装饰带参无返回值的函数
装饰带参有返回值的函数

你可能感兴趣的:(单例模式、装饰器)