日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python设计模式(一)创建型模式

發(fā)布時間:2023/12/8 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python设计模式(一)创建型模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

創(chuàng)建型模式(5種):工廠方法模式、抽象工廠模式、創(chuàng)建者模式、原型模式、單例模式

https://www.bilibili.com/video/BV19541167cn?spm_id_from=333.999.0.0

1、面向?qū)ο?/h2> """ SOLID原則:- 開放封閉原則- 里氏替換原則- 依賴倒置原則- 接口隔離原則- 單一職責(zé)原則 """ from abc import ABCMeta, abstractmethodclass Payment(metaclass=ABCMeta):# abstract class@abstractmethoddef pay(self, money):passclass Aipay(Payment):def pay(self, money):print('支付寶支付%d元.' % money)class WechatPay(Payment):def pay(self, money):print('微信支付%d元.' % money)p = Aipay() p.pay(100)

2、簡單工廠模式(不屬于23種)

  • 簡單工廠模式
    • 內(nèi)容:不直接向客戶端暴露創(chuàng)建的實(shí)現(xiàn)細(xì)節(jié),而是通過一個工廠類來復(fù)制創(chuàng)建產(chǎn)品類的實(shí)現(xiàn)
    • 角色:
      • 工廠角色
      • 抽象產(chǎn)品角色
      • 具體產(chǎn)品角色
    • 優(yōu)點(diǎn):
      • 隱藏了對象創(chuàng)建的實(shí)現(xiàn)細(xì)節(jié)
      • 客戶端不需要修改代碼
    • 缺點(diǎn)
      • 違反了單一職責(zé)原則,將創(chuàng)建邏輯集中到一個工廠類里
      • 當(dāng)添加新廠品時,需要修改工廠類代碼,違反了開閉原則
from abc import ABCMeta, abstractmethodclass Payment(metaclass=ABCMeta):# abstract class@abstractmethoddef pay(self, money):passclass Alipay(Payment):def __init__(self, use_huabei=False):self.use_huabei = use_huabeidef pay(self, money):if self.use_huabei:print('花唄支付%d元.' % money)else:print("支付寶余額支付%d元" % money)class WechatPay(Payment):def pay(self, money):print('微信支付%d元.' % money)class PaymentFactory:def create_payment(self, method):if method == 'alipay':return Alipay()elif method == 'wechat':return WechatPay()elif method == 'huabei':return Alipay(use_huabei=True)else:return TypeError("No such payment named %s" % method)# client pf = PaymentFactory() p = pf.create_payment('huabei') p.pay(100)

3、工廠方法模式

  • 工廠方法模式
    • 內(nèi)容:定義一個用于創(chuàng)建對象的接口(工廠接口),讓子類決定實(shí)例化哪一個產(chǎn)品類
    • 角色:
      • 抽象工廠角色
      • 具體工廠角色
      • 抽象產(chǎn)品角色
      • 具體產(chǎn)品角色
    • 優(yōu)點(diǎn):
      • 每個具體產(chǎn)品都對應(yīng)一個具體工廠類,不需要修改工廠類代碼
      • 隱藏了對象創(chuàng)建的實(shí)現(xiàn)細(xì)節(jié)
    • 缺點(diǎn):
      • 每增加一個具體類,就必須增加一個相應(yīng)的具體工廠類
from abc import ABCMeta, abstractmethodclass Payment(metaclass=ABCMeta):# abstract class@abstractmethoddef pay(self, money):passclass Alipay(Payment):def __init__(self, use_huabei=False):self.use_huabei = use_huabeidef pay(self, money):if self.use_huabei:print('花唄支付%d元.' % money)else:print("支付寶余額支付%d元" % money)class WechatPay(Payment):def pay(self, money):print('微信支付%d元.' % money)class PaymentFactory(metaclass=ABCMeta):@abstractmethoddef create_payment(self):passclass AlipayFactory(PaymentFactory):def create_payment(self):return Alipay()class WechatpayFactory(PaymentFactory):def create_payment(self):return WechatPay()class HuabeiFactory(PaymentFactory):def create_payment(self):return Alipay(use_huabei=True)pf = HuabeiFactory() p = pf.create_payment() p.pay(100)

4、抽象工廠模式

  • 抽象工廠模式:
    • 內(nèi)容:定義一個工廠類接口,讓工廠子類來創(chuàng)建一系列相關(guān)或相互依賴的對象
    • 相比工廠方法模式,抽象工廠模式中的每個具體工廠都生產(chǎn)一套產(chǎn)品
    • 角色:
      • 抽象工廠角色
      • 具體工廠角色
      • 抽象產(chǎn)品角色
      • 具體產(chǎn)品角色

5、建造者模式

  • 建造者模式
    • 內(nèi)容:將一個復(fù)雜對象的構(gòu)建與他的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
    • 角色:
      • 抽象創(chuàng)建者
      • 具體創(chuàng)建者
      • 指揮者
      • 產(chǎn)品
    • 建造者模式和抽象工廠模式相似,也用來創(chuàng)建復(fù)雜對象,主要區(qū)別是建造者模式注重一步一步構(gòu)建一個
      復(fù)雜對象,而抽象工廠模式注重多個系列的產(chǎn)品對象
from abc import ABCMeta, abstractmethodclass Player:def __init__(self, face=None, body=None, arm=None, leg=None):self.face = faceself.body = bodyself.arm = armself.leg = legdef __str__(self):return "%s %s %s %s" % (self.face, self.body, self.arm, self.leg)class PlayBuilder(metaclass=ABCMeta):@abstractmethoddef build_face(self):pass@abstractmethoddef build_body(self):pass@abstractmethoddef build_arm(self):pass@abstractmethoddef build_leg(self):passclass SexyGirlBuilder(PlayBuilder):def __init__(self):self.player = Player()def build_face(self):self.player.face = "臉蛋"def build_body(self):self.player.body = "苗條"def build_arm(self):self.player.arm = "胳膊"def build_leg(self):self.player.leg = "大長腿"class Monster(PlayBuilder):def __init__(self):self.player = Player()def build_face(self):self.player.face = "怪獸臉"def build_body(self):self.player.body = "怪獸身材"def build_arm(self):self.player.arm = "怪獸胳膊"def build_leg(self):self.player.leg = "怪獸腿"class PlayerDirector: # 控制組裝順序def build_player(self, builder):builder.build_body()builder.build_face()builder.build_arm()builder.build_leg()return builder.player# client builder = SexyGirlBuilder() director = PlayerDirector() p = director.build_player(builder)

6、單例模式

  • 單例模式
    • 內(nèi)容:保證一個類只有一個實(shí)例,并提供一個訪問它的全局訪問點(diǎn)
    • 角色:單例
    • 優(yōu)點(diǎn):
      • 對唯一實(shí)例的受控訪問
      • 單例相當(dāng)于全局變量,但防止了命名空間被污染
class Singleton:def __new__(cls, *args, **kwargs):if not hasattr(cls, "_instance"):cls._instance = super(Singleton, cls).__new__(cls)return cls._instanceclass MyClass(Singleton):def __init__(self, a):self.a = aa = MyClass(10) b = MyClass(20)

總結(jié)

以上是生活随笔為你收集整理的python设计模式(一)创建型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。