1

简单工厂模式

工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。

从软件开发的角度来说,这样就有效的降低了模块之间的耦合。
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。

class car:
    '''interface as Product'''
    def drive(self):
        pass

class BMW(car):
    '''Concrete Product'''
    def __init__(self,carname):
        self.__name=carname
    def drive(self):
        print("Drive the BMW as "+self.__name)

class Benz(car):
    '''Concrete Product'''
    def __init__(self,carname):
        self.__name=carname
    def drive(self):
        print("Drive the Benz as "+self.__name)

class driver:
    '''Factory also called Creator'''
    def driverCar(self,name):
        if name=="BMW":
            return BMW("BMW")
        elif name=="Benz":
            return Benz("Benz")

carname=input("please input BMW Benz :")
dier=driver()
d=dier.driverCar(carname)
d.drive()

单例模式

python的单例模式,所谓单例模式就是一个类只能创建一个实例化。

哪些地方需要用到单例模式,其实想一想有很多,比如
1.Python的logger就是一个单例模式,用以日志记录
2.Windows的资源管理器是一个单例模式
3.线程池,数据库连接池等资源池一般也用单例模式
4.网站计数器

当每个实例都会占用资源,而且实例初始化会影响性能,这个时候就可以考虑使用单例模式,它给我们带来的好处是只有一个实例占用资源,并且只需初始化一次


#通过装饰器实现单例模式
def singleton(cls, *args, **kw):
    instances = {}  #类变量字典

    def _singleton():
        #判断 cls 是否 存在字典中
        if cls not in instances:
            #如果不在字典中,则添加进来
            instances[cls] = cls(*args, **kw)
            #在的话就return返回
        return instances[cls]

    return _singleton

@singleton  #b=singleton(a)()  等同于 @singleton
class a:
    def shwo(self):
        print("showshow")

a1=a() #实例化对象1
a2=a() #实例化对象2
print(a1) #如果不是单例模式创建,这个地方打印两次结果不同
print(a2)
a1.shwo()  
a2.shwo()     

离岛
588 声望79 粉丝