Python常用设计模式之单例模式与工厂模式

一、单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某 一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象 就能派上用场。
比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来 读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就 是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况 下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。 注意:在python中导入模块就是一种单例模式。

练习:创建Sun类

class Sun(object):
    #定义一个变量
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            #如果__instance还没有值,就给__instance变量赋值
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            #如果__instance有值,则直接返回。
            return cls.__instance

sun = Sun()
print(id(sun))#2185130970304
sun1=Sun()
print(id(sun1))#2185130970304
#sun和sun1的id值相同

二、工厂模式

工厂模式是一个在软件开发中用来创建对象的设计模式。
当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在 如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类 型,不在需要修改已存在的类,只增加能够产生新类型的子类。
使用工厂模式应用场景:当不知道用户想要创建什么样的对象时可以使用工厂模式。
例:

class Car(object):

    def run(self):
        print('蹭蹭的跑')

    def stop(self):
        print('呜呜的停车')

class BMW(Car):

    def run(self):
        print('宝马--->>蹭蹭的跑')

    def stop(self):
        print('宝马--->>呜呜的停车')

class Benz(Car):
    def run(self):
        print('奔驰--->>蹭蹭的跑')

    def stop(self):
        print('奔驰--->>呜呜的停车')

class Skoda(Car):
    def run(self):
        print('斯柯达--->>蹭蹭的跑')

    def stop(self):
        print('斯柯达--->>呜呜的停车')

class CarFactory(object):

    def new_car(self,name):

        if name == 'BMW':
            bmw = BMW()
            return bmw

        if name == 'Benz':
            benz = Benz()
            return benz

        if name == 'skd':
            return Skoda()

class CarStore(object):
    def __init__(self,factory):
        self.factory=factory

    def order(self,name):
        new_car=self.factory.new_car(name)
        return new_car
        
car_factory=CarFactory()
car_store=CarStore(car_factory)
car= car_store.order('skd')
car.run()
car.stop()

Python常用设计模式之单例模式与工厂模式_第1张图片

你可能感兴趣的:(Python常用设计模式之单例模式与工厂模式)