湖州网站推广,监理工程师,秦皇岛酒店网站设计,网站的作用和意义一、设计模式_工厂模式实现 设计模式是面向对象语言特有的内容#xff0c;是我们在面临某一类问题时候固定的做法#xff0c;设计模式有很多种#xff0c;比较流行的是#xff1a;GOF#xff08;Goup Of Four#xff09;23种设计模式。当然#xff0c;我们没有必要全部学…一、设计模式_工厂模式实现 设计模式是面向对象语言特有的内容是我们在面临某一类问题时候固定的做法设计模式有很多种比较流行的是GOFGoup Of Four23种设计模式。当然我们没有必要全部学习学习几个常用的即可。
对于初学者我们学习两个最常用的模式工厂模式和单例模式。
工厂模式实现了创建者和调用者的分离使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。 #工厂模式
class CarFactory:def createCar(self,brand):if brand 奔驰:return Benz()elif brand 宝马:return BMW()elif brand 比亚迪:return BYD()else:return 未知品牌无法创建
class Benz:pass
class BMW:pass
class BYD:pass
factory CarFactory()
c1 factory.createCar(奔驰)
c2 factory.createCar(宝马)
print(c1)
print(c2)运行结果
__main__.Benz object at 0x021C5770
__main__.BMW object at 0x021C5790二、设计模式_单例模式实现 单例模式Singleton Pattern的核心作用是确保一个类只有一个实例并且提供一个访问该实例的全局访问点。
单例模式只生成一个实例对象减少了对系统资源的开销。当一个对象的产生需要比较多的资源如读取配置文件、产生其他依赖对象时可以产生一个“单例对象”然后永久驻留内存中从而极大的降低开销。 ⚠️单例模式有多种实现的方式我们这里推荐重写__new__()的方法。 #单例模式
class MySingleton:__obj None__init_flag True
def __new__(cls, *args, **kwargs):if cls.__obj None:cls.__obj object.__new__(cls)
return cls.__obj
def __init__(self,name):if MySingleton.__init_flag:print(init....)self.name nameMySingleton.__init_flag False
a MySingleton(aa)
print(a)
b MySingleton(bb)
print(b)运算结果
init....
__main__.MySingleton object at 0x01E15610
__main__.MySingleton object at 0x01E15610三、工厂和单例模式结合 设计模式称之为“模式”就是一些固定的套路。我们很容易用到其他场景上比如前面讲的工厂模式我们需要将工厂类定义成“单例”只需要简单的套用即可实现
#测试工厂模式和单例模式的整合使用
class CarFactory:__obj None #类属性__init_flag True
def create_car(self,brand):if brand 奔驰:return Benz()elif brand 宝马:return BMW()elif brand 比亚迪:return BYD()else:return 未知品牌无法创建
def __new__(cls, *args, **kwargs):if cls.__obj None:cls.__obj object.__new__(cls)
return cls.__obj
def __init__(self):if CarFactory.__init_flag:print(init CarFactory....)CarFactory.__init_flag False
class Benz:pass
class BMW:pass
class BYD:pass
factory CarFactory()
c1 factory.create_car(奔驰)
c2 factory.create_car(比亚迪)
print(c1)
print(c2)
factory2 CarFactory()
print(factory)
print(factory2)运算结果
init CarFactory....
__main__.Benz object at 0x01E36E90
__main__.BYD object at 0x01E36C30
__main__.CarFactory object at 0x01E36730
__main__.CarFactory object at 0x01E36730