在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 設(shè)計(jì)模式
文件和字符串
異常和異常類
Python面向?qū)ο蠛喗?/span>
面向?qū)ο蠼輳?/span>
對(duì)象序列化
數(shù)據(jù)結(jié)構(gòu)
開發(fā)環(huán)境設(shè)置
設(shè)計(jì)模式
類庫
構(gòu)建塊
繼承和多態(tài)
高級(jí)特性
Python面向?qū)ο蠼坛?/span>

設(shè)計(jì)模式

現(xiàn)代軟件開發(fā)需要解決復(fù)雜的業(yè)務(wù)需求。 它還需要考慮未來的可擴(kuò)展性和可維護(hù)性等因素。 良好的軟件系統(tǒng)設(shè)計(jì)對(duì)于實(shí)現(xiàn)這些目標(biāo)至關(guān)重要。 設(shè)計(jì)模式在這樣的系統(tǒng)中起著重要的作用。

要理解設(shè)計(jì)模式,考慮下面的例子 -

  • 每輛車的設(shè)計(jì)都遵循基本的設(shè)計(jì)模式,四個(gè)車輪,方向盤,加速器 - 斷開離合器等核心驅(qū)動(dòng)系統(tǒng)。

所以,反復(fù)建造/生產(chǎn)的所有東西,必然會(huì)在其設(shè)計(jì)中遵循一種模式……汽車,自行車,披薩,atm機(jī)器,甚至是沙發(fā)床。

幾乎成為軟件中某些邏輯/機(jī)制/技術(shù)的標(biāo)準(zhǔn)編碼方式的設(shè)計(jì),因此被稱為或研究為軟件設(shè)計(jì)模式。

為什么設(shè)計(jì)模式很重要?

使用設(shè)計(jì)模式的好處是 -

  • 通過成熟的方法幫助您解決常見的設(shè)計(jì)問題。
  • 因?yàn)樗麄冇谐浞值奈募涗洠岳斫馍蠜]有含糊之處。
  • 縮短整體開發(fā)時(shí)間。
  • 幫助您更輕松地處理未來的擴(kuò)展和修改。
  • 可以減少系統(tǒng)中的錯(cuò)誤,因?yàn)樗鼈兪浅R妴栴}的可靠解決方案。

設(shè)計(jì)模式的分類

GoF(四人幫)設(shè)計(jì)模式分為三類,即創(chuàng)作型模式,結(jié)構(gòu)型模式和行為型模式。

創(chuàng)造性模式
創(chuàng)造性設(shè)計(jì)模式將對(duì)象創(chuàng)建邏輯與系統(tǒng)其余部分分開。創(chuàng)建模式不是創(chuàng)建對(duì)象,而是創(chuàng)建它們。 創(chuàng)建模式包括Abstract Factory,Builder,F(xiàn)actory Method,Prototype和Singleton。

由于語言的動(dòng)態(tài)特性,創(chuàng)造型模式在Python中不常用。 語言本身也為我們提供了足夠優(yōu)雅時(shí)尚所需的所有靈活性,但我們很少需要實(shí)現(xiàn)任何東西,比如singletonFactory。

而且這些模式提供了一種在隱藏創(chuàng)建邏輯的同時(shí)創(chuàng)建對(duì)象的方法,而不是直接使用新的運(yùn)算符實(shí)例化對(duì)象。

結(jié)構(gòu)模式
有時(shí)候不是從頭開始,而是需要使用現(xiàn)有的一組類來構(gòu)建更大的結(jié)構(gòu)。 這就是結(jié)構(gòu)類模式使用繼承來構(gòu)建新結(jié)構(gòu)的地方。 結(jié)構(gòu)對(duì)象模式使用組合/聚合來獲得新的功能。 適配器,橋梁,復(fù)合材料,裝飾,外墻,享元和代理是結(jié)構(gòu)模式。 他們提供組織課堂層次結(jié)構(gòu)的最佳方法。

行為模式
行為模式提供了處理對(duì)象間通信的最佳方式。 這種類型下的模式是:訪問者,責(zé)任鏈,命令,口譯員,迭代器,調(diào)解員,紀(jì)念品,觀察者,狀態(tài),策略和模板方法都是行為模式。

由于它們代表系統(tǒng)的行為,因此通常用它們來描述軟件系統(tǒng)的功能。

常用的設(shè)計(jì)模式

單例
它是所有設(shè)計(jì)模式中最具爭議性和知名度之一。 它用于過度面向?qū)ο蟮恼Z言,是傳統(tǒng)的面向?qū)ο缶幊痰闹匾M成部分。

Singleton模式用于,

  • 當(dāng)需要執(zhí)行日志記錄時(shí)。 記錄器實(shí)例由系統(tǒng)的所有組件共享。
  • 配置文件正在使用它,因?yàn)樾畔⒕彺嫘枰上到y(tǒng)中的所有各種組件維護(hù)和共享。
  • 管理與數(shù)據(jù)庫的連接。

這里是UML圖,

class Logger(object):
   def __new__(cls, *args, **kwargs):
      if not hasattr(cls, '_logger'):
      cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger

在這個(gè)例子中,Logger是一個(gè)Singleton。

當(dāng)__new__被調(diào)用時(shí),它通常會(huì)構(gòu)造該類的新實(shí)例。 當(dāng)重寫它時(shí),首先檢查單例實(shí)例是否已經(jīng)創(chuàng)建。 如果沒有創(chuàng)建,則使用supper調(diào)用來創(chuàng)建它。 因此,無論什么時(shí)候在Logger上調(diào)用構(gòu)造函數(shù),都會(huì)得到完全相同的實(shí)例。

>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>