目录
1 单例模式
1. 单例是什么
举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。
2. 创建单例-保证只有1个对象
# 实例化一个单例
classSingleton(object):
__instance = None
def__new__(cls, age, name):
#如果类数字能够__instance没有或者没有赋值
#那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
#能够知道之前已经创建过对象了,这样就保证了只有1个对象
If not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Singleton(18, "bin")
b = Singleton(8, "bin")
print(id(a))
print(id(b))
a.age = 19#给a指向的对象添加一个属性
b.print(b.age)#获取b指向的对象的age属性
运行结果:
In [12]: class Singleton(object):
...: __instance = None
...:
...: def__new__(cls, age, name):
...: if not cls.__instance:
...: cls.__instance = object.__new__(cls)
...: return cls.__instance
...:
...: a = Singleton(18, "bin")
...: b = Singleton(8, "bin")
...:
...: print(id(a))
...: print(id(b))
...:
...: a.age = 19
...: print(b.age)
...: 4391023224439102322419
3. 创建单例时,只执行1次__init__方法
# 实例化一个单例
classSingleton(object):
__instance = None
__first_init = False
def__new__(cls, age, name):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def__init__(self, age, name):
if not self.__first_init:
self.age = age
self.name = name
Singleton.__first_init = True
a = Singleton(18, "bin")
b = Singleton(8, "bin")
print(id(a))
print(id(b))
print(a.age)
print(b.age)
age = 19
print(b.age)
2 工厂模式
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量(可维护性)。
1. 简单工厂模式
Simple Factory模式不是独立的设计模式,他是Factory Method模式的一种简单的、特殊的实现。他也被称为静态工厂模式,通常创建者的创建方法被设计为static方便调用。
1、静态的工厂类
2、用全局函数改写工厂类
2. 工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态方法,使得它可以被子类继承。对于python来说,就是工厂类被具体工厂继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
抽象的工厂类提供了一个创建对象的方法,也叫作工厂方法。
1) 抽象工厂角色(Factory): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
2) 具体工厂角色(Stone_Axe_Factory,Steel_Axe_Factory):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3) 抽象产品角色(Axe):它是具体产品继承的父类或者是实现的接口。在python中抽象产品一般为父类。
4) 具体产品角色(Stone_Axe,Steel_Axe):具体工厂角色所创建的对象就是此角色的实例。由一个具体类实现。