Python两种模式,python23种设计模式
一、Python创意设计模式
1.工厂模式:解决对象创建问题。
2.构建器:控制复杂对象的创建。
3.原型:通过克隆原型来创建一个新的实例。
4.单例模式(Brog/Singleton):一个类只能创建同一个对象。
5.对象池模式:预先分配一组相同类型的实例。
6.延迟计算模式:延迟计算(Python的特性)
(1)工厂模式
解决对象创建的问题,解耦对象的创建和使用,包括工厂方法和抽象工厂。
#一个工厂方法的例子class dog:def speak(self):print( Wang Wang!)类猫:def speak(自):print(苗苗!)defanimal(speak _ type):if speak _ type== dog :return dog()elifspeak _ type== cat :return cat()(2)构造模式
用于控制复杂对象的构造、创建和表示分离。比如你买了一台电脑,工厂模式会直接把你的电脑给你,而建造模式会让你自定义电脑的配置,组装后给你。
#一个构造模式类计算机的例子:def __init__(self,serial _ number):self . serial=serial _ number self . Memory=None self . HDD=None self . GPU=None def _ _ str _ _(self):info=( Memory:{ } GB 。格式(自带内存),硬盘:{}GB 。格式(自带硬盘),“显卡:{}”。format(self.gpu))返回 \ n 。join(info)class Computer builder:def _ _ init _ _(self):self . Computer=Computer( XXXXXXXX )def configure _ memory(self,amount):self . Computer . hdd=amount def configure _ HDD(self,amount):self . Computer . HDD=amount def configure _ GPU(self,GPU _ model):self . Computer=GPU _ model class hardware engineer:def _ _ init _ _(self):self . builder=None def construct _ Computer(self,memory,HDD,GPU):self . builder=Computer builder()
通过克隆原型创建新实例。您可以使用相同的原型,并通过修改一些属性来创建一个新的实例。目的:您可以在一些创建实例的成本很高的地方使用原型模式。
(4)单一模式
一个类创建的对象是一样的,比如Python模块是singleton,多次导入只会导入一次。您可以通过共享同一个实例来创建单例模式。
# singleton模式classsingleton: def _ _ new _ _ (CLS,* args,* * kwargs): if not hasattr (CLS, _ instance): _ instance=super()。_ _ new _ _ (CLS,* args,* *夸尔格斯)CLS.
二、结构设计模式
1.Decorater模式:不需要子类化和扩展object函数。
2.代理模式:将一个对象的操作代理给另一个对象。
3.适配器模式:通过间接层适配统一接口。
4.门面:简化复杂对象的访问问题。
5.Flyweight:通过对象重用(pool)提高资源利用率,比如连接池。
6.模型-视图-控制器(MVC):分离显示逻辑和业务逻辑
(1)代理模式
将一个对象的操作代理给另一个对象。这里可以使用堆栈/队列来代理对队列的操作。
# agent mode 3354 stack from collections import deque类stack(object):def _ _ init _ _(self):self。_ deque=deque () def push (self,Value):返回self。_ deque . append(value)def pop(self):返回self。_ deque . pop()def empty(self):return len(self。_ deque)==0 (2)适配器模式
把不同的对象的接口适配到同一个接口,当需要不同的对象统一接口的时候可以使用适配器模式
类狗(object):def _ _ init _ _(self):self。name= Dog def bark(self):返回 woof 类猫(对象):def _ _ init _ _(自身):自身。name= Cat def苗(self):返回苗类Adapter: def __init__(self,obj,* * adapted _ methods):self。自己.__词典_ _。update(adapted _ methods)def _ _ get attr _ _(self,attr):返回getattr(self.obj,attr)objects=[]Dog=Dog()objects。append(Adapter(Dog,make _ noise=Dog。树皮))猫=猫()对象。append(适配器(Cat,make _ noise=Cat。bark))for obj in objects:print( A { 0 } goes { 1 }).format(obj.name,obj.make_noise()))三、行为型模式
1、迭代器模式(迭代器):通过统一的接口迭代对象
2、观察者模式(观察员):对象发生改变的时候,观察者执行相应的动作
3、策略模式(策略):针对不同规模输入使用不同的策略
(1)迭代器模式
计算机编程语言内置对迭代器模式的支持,可以用为遍历各种可迭代的的数据类型,不可迭代对象需要用(__下一个_ _和__iter__)实现迭代器,可以迭代的对象只使用__iter__
# 迭代器模式—— 可以迭代的堆栈形式集合导入dequeclass Stack(object):def _ _ init _ _(self):self ._deque=deque() def push(self,value):返回自我._ deque。追加(值)定义弹出(自身):返回自我._ deque。pop()def empty(self):return len(self ._ deque)==0 def _ _ ITER _ _(self):RES=[]for I in self ._ deque:RES . append(I)for I in reversed(RES):yield I
(2)观察者模式
发布订阅最为常见,发布订阅用于解耦逻辑,可以通过回调等方式实现,当条件发生时可以使用相应的回调函数
# 发布订阅模式类发布者:def _ _ init _ _(self):self。观察者=[]def add(自身,观察者):如果观察者不在自己中,观察者:自我。观察者。附加(观察者)else:print(未能添加:{} 。format(观察者))def remove(自身,观察者):try:自身。观察者。删除(观察者)除外:打印(未能删除:{} 。format(observer))def notify(self):[o . notify _ by(self)for o in self。观察员]类格式化程序(Publisher): def __init__(self,name): super().__init__() self.name=name self ._ data=0 @属性定义数据(自身):返回自我._data @data.setter def data(self,new_value): self ._ data=int(new _ value)self。通知()类二进制格式化程序:def notify _ by(self,publisher): print({} : {}现在有ctdsb数据={} .格式(类型(自身))。__name__,publisher.name,ctdsb(publisher.data))) (3)策略模式
根据不同输入采用不同的策略,对外暴露统一的接口,内部采用不同的策略计算
# 策略模式类顺序:def __init__(self,price,discount _ strategy=None):self。价格=价格自我。discount _ strategy=discount _ strategy def Price _ after _ discount(self):如果self。折扣_策略:折扣=自我。discount _ strategy(self)else:discount=0返回self。价格折扣def _ _ repr _ _(self):fmt= Price:{ },折扣后价格:{} 返回fmt.format(self.price,self.price_after_discount())
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。