设计模式是面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。
初学者最常使用的模式 工厂模式和单例模式
23种设计模式
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
设计模式是面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。
初学者最常使用的模式 工厂模式和单例模式
设计模式—工厂模式
设计模式是面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。
初学者最常使用的模式 工厂模式和单例模式
工厂模式实现了 使用者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。
#测试工厂模式
#定义车工厂类
class Carfactory:
#定义生产汽车的方法
def creatcar(self,brand):
if brand=="奔驰":
return Benz()
elif brand=="宝马":
return BMW()
elif brand=="比亚迪":
return BYD()
class Benz:
print("奔驰大G")
class BMW:
print("宝马X6")
class BYD:
print("SUV宋")
#创建工厂对象
factory=Carfactory()
c1=factory.creatcar("奔驰")
c2=factory.creatcar("宝马")
c3=factory.creatcar("比亚迪")
print(c1)
print(c2)
print(c3)
设计模式—单例模式
单例模式的核心作用是确保一个类只有一个实例**,并且提供一个访问该实例的全局访问点。 单例模式只生成一个实例对象,减少了系统资源的开销,当一个对象需要比较多的资源时,比如读取配置文件、产生其它依赖对象时,可以产生一个“单例对象”,永久驻留内存中,极大降低开销。 定义单例时,通常需要重**写 new方法和构造器构造方法
#单例模式
class Mysingleton:
#这个类创建的单例,通常用属性保存
object=None
#加标记,保证初始化一次
__init_flag=True
def __new__(cls, *args, **kwargs):
#cls(当前类对象),判断cls下的属性是否为空
if cls.object==None:
#调用obj父类的创建方式,然后传进类
cls.object=object.__new__(cls)
return cls.object
#属性重写
def __init__(self,name):
if Mysingleton.__init_flag==True:
print("初始化")
Mysingleton.__init_flag=False
self.name=name
a=Mysingleton("yao")
b=Mysingleton("zeng")
print(a)
print(b)
内存地址一样,yao,zeng两者是一个对象.
将工厂模式改版为单例模式
class Carfactory:
object=None
__init_flag=True
def creatcar(self,brand):
if brand=="奔驰":
return Benz()
elif brand=="宝马":
return BMW()
elif brand=="比亚迪":
return BYD()
else:
return "品牌未知无法创建"
def __new__(cls, *args, **kwargs):
if cls.object==None:
cls.object=object.__new__(cls)
return cls.object
def __init__(self):
if Carfactory.__init_flag==True:
Carfactory.__init_flag=False
print("初始化")
class Benz:
print("奔驰大G")
class BMW:
print("宝马X6")
class BYD:
print("SUV宋")
factory=Carfactory()
c1=factory.creatcar("奔驰")
c2=factory.creatcar("宝马")
c3=factory.creatcar("比亚迪")
print(c1)
print(c2)
print(c3)
factory1=Carfactory()
print(factory1)
print(factory)
PS: 欢迎补充和指正