欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Python設計模式系列之一: 用模式改善軟件設計

2003 年 7 月 03 日

軟件設計大師總是要比初學(xué)者更加清楚該如何設計軟件,因為他們手中掌握著(zhù)設計模式這一法寶。作為一種高級的軟件復用形式,設計模式是眾多優(yōu)秀軟件設計師集體智慧的結晶,能夠很好地指導軟件設計過(guò)程。本系列文章介紹如何在用Python開(kāi)發(fā)軟件時(shí)應用各種設計模式,Python是一種簡(jiǎn)單、靈活、高效的原型語(yǔ)言,特別適合于用來(lái)理解和掌握設計模式。

一、什么是設計模式

設計模式(design pattern)的提出,是面向對象程序設計演化過(guò)程中的一個(gè)重要里程碑。正如Gamma,Helm,Johnson和Vlissides在他們的經(jīng)典著(zhù)作《設計模式》一書(shū)中所說(shuō)的:設計模式使得人們可以更加簡(jiǎn)單和方便地去復用成功的軟件設計和體系結構,從而能夠幫助設計者更快更好地完成系統設計。

設計模式的概念最早起源于建筑設計大師Christopher Alexander關(guān)于城市規劃和建筑設計的著(zhù)作《建筑的永恒方法》,盡管Alexander的著(zhù)作是針對建筑領(lǐng)域的,但他的觀(guān)點(diǎn)實(shí)際上適用于所有的工程設計領(lǐng)域,其中就包括軟件設計領(lǐng)域。在《建筑的永恒方法》一書(shū)中,Alexander是這樣描述模式的:

模式是一條由三部分組成的規則,它表示了一個(gè)特定環(huán)境、一個(gè)問(wèn)題和一個(gè)解決方案之間的關(guān)系。每一個(gè)模式描述了一個(gè)在我們周?chē)粩嘀貜桶l(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動(dòng)。

將設計模式引入軟件設計和開(kāi)發(fā)過(guò)程的目的在于充分利用已有的軟件開(kāi)發(fā)經(jīng)驗,這是因為設計模式通常是對于某一類(lèi)軟件設計問(wèn)題的可重用的解決方案。優(yōu)秀的軟件設計師都非常清楚,不是所有的問(wèn)題都需要從頭開(kāi)始解決,他們更愿意復用以前曾經(jīng)使用過(guò)的解決方案,每當他們找到一個(gè)好的解決方案,他們會(huì )一遍又一遍地使用,這些經(jīng)驗是他們成為專(zhuān)家的部分原因。設計模式的最終目標就是幫助人們利用熟練的軟件設計師的集體經(jīng)驗,來(lái)設計出更加優(yōu)秀的軟件。

在軟件設計領(lǐng)域中,每一個(gè)設計模式都系統地命名、解釋和評價(jià)了面向對象系統中的一個(gè)重要的和可復用的設計。這樣,我們只要搞清楚這些設計模式,就可以完全或者說(shuō)很大程度上吸收了那些蘊含在模式中的寶貴經(jīng)驗,從而對軟件體系結構有了比較全面的了解。更加重要的是,這些模式都可以直接用來(lái)指導面向對象系統設計中至關(guān)重要的對象建模問(wèn)題,實(shí)際工作中一旦遇到具有相同背景的場(chǎng)合,只需要簡(jiǎn)單地套用這些模式就可以了,從而省去了很多摸索工作。





回頁(yè)首


二、經(jīng)典的設計模式MVC

在長(cháng)期的軟件實(shí)踐過(guò)程中,人們逐漸總結出了一些實(shí)用的設計模式,并將它們應用于具體的軟件系統中,出色地解決了很多設計上的難題。源于Smalltalk,并在Java中得到廣泛應用的模型-視圖-控制器(Model-View-Controller,MVC)模式,是非常經(jīng)典的一個(gè)設計模式,通過(guò)它你可以更好地理解"模式"這一概念。

MVC模式通常用在開(kāi)發(fā)人機交互軟件的時(shí)候,這類(lèi)軟件的最大特點(diǎn)就是用戶(hù)界面容易改變,例如,當你要擴展一個(gè)應用程序的功能時(shí),通常需要修改菜單來(lái)反映這種變化。如果用戶(hù)界面和核心功能緊緊交織在一起,要建立這樣一個(gè)靈活的系統通常是非常困難的,因為很容易產(chǎn)生錯誤。為了更好地開(kāi)發(fā)這樣的軟件系統,系統設計師必須考慮下面兩個(gè)因素:

  • 用戶(hù)界面應該是易于改變的,甚至在運行期間也是有可能改變的;
  • 用戶(hù)界面的修改或移植不會(huì )影響軟件的核心功能代碼。

為了解決這個(gè)問(wèn)題,可以采用將模型(Model)、視圖(View)和控制器(Controller)相分離的思想。在這種設計模式中,模型用來(lái)封裝核心數據和功能,它獨立于特定的輸出表示和輸入行為,是執行某些任務(wù)的代碼,至于這些任務(wù)以什么形式顯示給用戶(hù),并不是模型所關(guān)注的問(wèn)題。模型只有純粹的功能性接口,也就是一系列的公開(kāi)方法,這些方法有的是取值方法,讓系統其它部分可以得到模型的內部狀態(tài),有的則是置值方法,允許系統的其它部分修改模型的內部狀態(tài)。

視圖用來(lái)向用戶(hù)顯示信息,它獲得來(lái)自模型的數據,決定模型以什么樣的方式展示給用戶(hù)。同一個(gè)模型可以對應于多個(gè)視圖,這樣對于視圖而言,模型就是可重用的代碼。一般來(lái)說(shuō),模型內部必須保留所有對應視圖的相關(guān)信息,以便在模型的狀態(tài)發(fā)生改變時(shí),可以通知所有的視圖進(jìn)行更新。

控制器是和視圖聯(lián)合使用的,它捕捉鼠標移動(dòng)、鼠標點(diǎn)擊和鍵盤(pán)輸入等事件,將其轉化成服務(wù)請求,然后再傳給模型或者視圖。整個(gè)軟件的用戶(hù)是通過(guò)控制器來(lái)與系統交互的,他通過(guò)控制器來(lái)操縱模型,從而向模型傳遞數據,改變模型的狀態(tài),并最后導致視圖的更新。

MVC設計模式將模型、視圖與控制器三個(gè)相對獨立的部分分隔開(kāi)來(lái),這樣可以改變軟件的一個(gè)子系統而不至于對其它子系統產(chǎn)生重要影響。例如,在將一個(gè)非圖形化用戶(hù)界面軟件修改為圖形化用戶(hù)界面軟件時(shí),不需要對模型進(jìn)行修改,而添加一個(gè)對新的輸入設備的支持,則通常不會(huì )對視圖產(chǎn)生任何影響。

應用了MVC設計模式的軟件系統,其基本的實(shí)現過(guò)程是:

  1. 控制器創(chuàng )建模型;
  2. 控制器創(chuàng )建一個(gè)或多個(gè)視圖,并將它們與模型相關(guān)聯(lián);
  3. 控制器負責改變模型的狀態(tài);
  4. 當模型的狀態(tài)發(fā)生改變時(shí),模型會(huì )通知與之相關(guān)的視圖進(jìn)行更新。

如果用UML來(lái)表示MVC設計模式,則如圖1所示:







回頁(yè)首


三、Python與設計模式

盡管設計模式的目標是努力做到與語(yǔ)言的無(wú)關(guān)性,但事實(shí)上許多模式在應用時(shí)還是需要依賴(lài)于具體實(shí)現語(yǔ)言的某些特性,尤其是該語(yǔ)言的對象模型。由于《設計模式》一書(shū)采用的是C++和Smalltalk來(lái)講述設計模式,因此訪(fǎng)問(wèn)控制符和靜態(tài)成員方法(類(lèi)方法)等都可以直接使用,可惜的是這些特性在Python中都無(wú)法用到,原因是Python采了與C++完全不同的對象模式。

簡(jiǎn)單說(shuō)來(lái),Python是一種優(yōu)秀的面向對象腳本語(yǔ)言,它具有動(dòng)態(tài)語(yǔ)義和快速的原型開(kāi)發(fā)能力,也許在短短的幾分鐘內,你就可以開(kāi)發(fā)出使用其它語(yǔ)言可能需要花費幾個(gè)小時(shí)的原型系統。Python豐富的工具集使得它位于傳統腳本語(yǔ)言(如Tcl、Perl和Scheme)和系統編程語(yǔ)言(如C、C++和Java)之間,既具備了腳本語(yǔ)言的簡(jiǎn)單易用性,同時(shí)又能夠提供只有系統語(yǔ)言才可能擁有的某些高級特性。

從面向對象角度來(lái)看,Python和Smalltalk一樣都采用了完全的面向對象設計思想,其對象模型能夠支持諸如運算符重載、多重繼承等高級概念。但Python在設計時(shí)似乎忽略了面向對象的一項基本原則,那就是數據隱藏。與C++和Java不同,Python沒(méi)有為類(lèi)定義提供public、protected和private等關(guān)鍵字,這就意味著(zhù)任何人都可以直接修改對象的屬性。Python之所以這么做,也許是為了保證語(yǔ)法上的簡(jiǎn)潔性,就像Python的發(fā)明人Guido van Rossum所認為的那樣:"豐富的語(yǔ)法帶來(lái)的負擔多于幫助"。但在某些設計模式中,向外界隱藏數據和方法都是非常必要的,為此我們不得不利用Python對象模型提供的某些高級特性,來(lái)實(shí)現某種程度上的隱藏性。

在Python中應用設計模式的一個(gè)有利因素是它的動(dòng)態(tài)類(lèi)型綁定,也就是說(shuō)一個(gè)對象很少只是一個(gè)類(lèi)的實(shí)例,而是可以在運行時(shí)動(dòng)態(tài)改變。在面向對象系統中,接口是一個(gè)基本的組成部分,對象只有通過(guò)它們的接口才能與外界進(jìn)行交互。對象的接口與其功能是完全分離的,支持相同請求的不同對象針對同一請求所觸發(fā)的操作可能完全不同,這就是動(dòng)態(tài)綁定的概念。動(dòng)態(tài)綁定雖然看起來(lái)在一定程度上使得代碼不同那么容易理解和維護,但它的確可以使整個(gè)軟件系統的結構顯得更加清晰和合理。

作為一門(mén)優(yōu)秀的腳本語(yǔ)言,Python正在被越來(lái)越多的人所接受,使用Python開(kāi)發(fā)的項目也越來(lái)越多,這也難怪會(huì )被大家推崇為"下一代編程語(yǔ)言"中的典型代表。隨著(zhù)應用范圍的不斷擴展,如何在用Python開(kāi)發(fā)軟件時(shí)充分利用已有的經(jīng)驗和成果將成為人們關(guān)注的焦點(diǎn),而設計模式作為軟件復用的一個(gè)重要方面,其價(jià)值自然是不言而喻??蓡?wèn)題是目前所使用的設計模式大都是人們在用Smalltalk、C++和Java開(kāi)發(fā)軟件時(shí)所總結出來(lái)的,因此或多或少地帶有這些語(yǔ)言的影子,而要想在Python中使用這些設計模式,必須根據Python的自身特點(diǎn)和實(shí)際需要,靈活地加以運用。





回頁(yè)首


四、Python對象模型

對一門(mén)具體的編程語(yǔ)言來(lái)說(shuō),在應用設計模式時(shí)影響最大的莫過(guò)于它的對象模型了,這是因為大部分設計模式都源自于C++和Java這類(lèi)面向對象編程語(yǔ)言。要想在Python中復用這些設計模式,首先需要對Python的對象模型有一個(gè)比較清晰的認識。

4.1 類(lèi)

同其它面向對象編程語(yǔ)言一樣,Python中的類(lèi)也是一種用戶(hù)自定義的數據類(lèi)型,其基本的語(yǔ)法格式是:


        class <name>(superclass, ...):		# 定義類(lèi)            data = value				# 共享的類(lèi)變量            def method(self, ...):			# 類(lèi)中的方法            self.member = value		# 實(shí)例的數據            

類(lèi)定義從關(guān)鍵字class開(kāi)始,并包含整個(gè)縮進(jìn)代碼塊,類(lèi)中定義的方法和屬性構成了類(lèi)的名字空間(name space)。一個(gè)類(lèi)通常會(huì )有多個(gè)方法,它們都以關(guān)鍵字def開(kāi)頭,并且第一個(gè)參數通常都是self,Python中的變量self相當于C++中的關(guān)鍵字this,其作用是傳遞一個(gè)對象的引用。

Python中的類(lèi)屬性位于類(lèi)的名字空間中,可以被所有的類(lèi)實(shí)例所共享,這一點(diǎn)同C++和Java相同。訪(fǎng)問(wèn)類(lèi)屬性時(shí)不需要事先創(chuàng )建類(lèi)的實(shí)例,直接使用類(lèi)名就可以了。例如:


>>> class Friend:            default_age = 20            >>> Friend.default_age            20            

除了自定義的類(lèi)屬性外,Python中的每個(gè)類(lèi)其實(shí)都具有一些特殊的類(lèi)屬性,它們都是由Python的對象模型所提供的。表1列出了這些類(lèi)屬性:

屬性名 說(shuō)明
__dict__ 類(lèi)名字空間的字典變量
__doc__ 類(lèi)的文檔說(shuō)明字符串
__name__ 類(lèi)的名稱(chēng)
__module__ 類(lèi)的模塊名
__bases__ 該類(lèi)所有父類(lèi)組成的元組

>表1特殊的類(lèi)屬性

4.2 實(shí)例

定義類(lèi)的目的是為了創(chuàng )建它的實(shí)例,從面向對象的角度看,類(lèi)是對數據及其相關(guān)操作的封裝,而類(lèi)實(shí)例則是對現實(shí)生活中某個(gè)實(shí)體的抽象。假設定義了如下一個(gè)類(lèi):


        class School:            def __init__(self, name):            self.name = name            self.students = []            def addStudent(self, student):            self.students.append(student)            

要創(chuàng )建School類(lèi)的一個(gè)實(shí)例,可以執行下面的語(yǔ)句:


bit = School("Beijing Institute of Technology")            

在C++和Java中創(chuàng )建類(lèi)實(shí)例時(shí),與類(lèi)具有相同名稱(chēng)的構造函數被調用,而在Python中創(chuàng )建一個(gè)類(lèi)的實(shí)例時(shí),將調用名為_(kāi)_init__的特殊方法。Python中的類(lèi)實(shí)例繼承了類(lèi)的所有方法和屬性,并且有自己獨立的名字空間,使用下面的方法可以訪(fǎng)問(wèn)類(lèi)實(shí)例的方法和屬性:


bit.addStudent("gary")            bit.students            

Python中的對象屬性有一個(gè)非常有趣的地方,那就是使用它們之前不用像C++和Java那樣,必須先在類(lèi)中進(jìn)行聲明,因為這些都是可以動(dòng)態(tài)創(chuàng )建的。作為一門(mén)動(dòng)態(tài)類(lèi)型語(yǔ)言,Python的這一特性的確非常靈活,但有時(shí)也難免產(chǎn)生問(wèn)題。例如在許多針對接口的設計模式中,通常都需要知道對象所屬的類(lèi),以便能夠調用不同的實(shí)現方法,這些在C++和Java這些強類(lèi)型語(yǔ)言的對象模型中不難實(shí)現,但對Python來(lái)講可就不那么簡(jiǎn)單了,因為Python中的每個(gè)變量事實(shí)上都沒(méi)有固定的類(lèi)型。

為了解決這一問(wèn)題,Python的__builtin__模塊提供了兩個(gè)非常實(shí)用的內建函數:isinstance()和issubclass()。其中函數isinstance()用于測試一個(gè)對象是否是某個(gè)類(lèi)的實(shí)例,如果是的話(huà)則返回1,否則返回0。其基本的語(yǔ)法格式是:


isinstance (instance_object, class_object)            

例如:


>>> class Test:            pass            >>> inst = Test()            >>> isinstance(inst, Test)            1            

而函數issubclass()則用于測試一個(gè)類(lèi)是否是另一個(gè)類(lèi)的子類(lèi),如果是的話(huà)則返回1,否則返回0。其基本的語(yǔ)法格式是:


issubclass(classobj1, classobj2)            

例如:


>>> class TestA:            pass            >>> class TestB(TestA):            pass            >>> issubclass(TestA, TestB)            0            >>> issubclass(TestB, TestA)            1            

和類(lèi)一樣,Python中的每個(gè)類(lèi)實(shí)例也具有一些特殊的屬性,它們都是由Python的對象模型所提供的。表2列出了這些屬性:

屬性名 說(shuō)明
__dict__ 實(shí)例名字空間的字典變量
__class__ 生成該實(shí)例的類(lèi)
__methods__ 實(shí)例所有方法的列表

表2 特殊的實(shí)例屬性

4.3繼承

在面向對象的程序設計中,繼承(Inheritance)允許子類(lèi)從父類(lèi)那里獲得屬性和方法,同時(shí)子類(lèi)可以添加或者重載其父類(lèi)中的任何方法。在Python中定義繼承類(lèi)的語(yǔ)法格式是:


class <name>(superclass, superclass, ...)            suit            

例如,對于下面這個(gè)類(lèi):


        class Employee:            def __init__(self, name, salary = 0):            self.name = name            self.salary = salary            def raisesalary(self, percent):            self.salary = self.salary  * (1 + percent)            def work(self):            print self.name, "writes computer code"            

可以為其定義如下的子類(lèi):


        class Designer(Employee):            def __init__(self, name):            Employee.__init__(self, name, 5000)            def work(self):            print self.name, "writes design document"            

在C++和Java的對象模型中,子類(lèi)的構造函數會(huì )自動(dòng)調用父類(lèi)的構造函數,但在Python中卻不是這樣,你必須在子類(lèi)中顯示調用父類(lèi)的構造函數,這就是為什么在Designer. __init__方法中必須調用Employee.__init__方法的原因。

人們對多重繼承的看法一直褒貶不一,C++對象模型允許多重繼承,而Java對象模型則是通過(guò)接口(Interface)來(lái)間接實(shí)現多重繼承的。在對多重繼承的處理上,Python采用了和C++類(lèi)似的方法,即允許多重繼承,例如:


    class A:            pass            class B(A):            pass            class C:            pass            class D(B, C):            pass            

4.4 多態(tài)

嚴格說(shuō)來(lái),像C++和Java這些強類(lèi)型語(yǔ)言對象模型中的多態(tài)概念并不適用于Python,因為Python沒(méi)有提供類(lèi)型聲明機制。但由于Python本身是一種動(dòng)態(tài)類(lèi)型語(yǔ)言,允許將任意值賦給任何一個(gè)變量,如果我們對多態(tài)的概念稍加擴充,將其理解為具有能同時(shí)處理多種數據類(lèi)型的函數或方法,那么Python對象模型實(shí)際上也支持經(jīng)過(guò)弱化后的多態(tài)。

Python直到代碼運行之時(shí)才去決定一個(gè)變量所屬的類(lèi)型,這一特性稱(chēng)為運行時(shí)綁定(runtime binding)。Python解析器內部雖然也對變量進(jìn)行類(lèi)型分配,但卻十分模糊,并且只有在真正使用它們時(shí)才隱式地分配類(lèi)型。例如,如果程序調用abs(num),則除數字之外的任何類(lèi)型對變量num都沒(méi)有意義,此時(shí)變量num事實(shí)上就進(jìn)行了非正式的類(lèi)型分配。

能夠處理不同抽象層次的對象,是面向對象編程最重要的特性之一,也是Python的一個(gè)非常重要的組成部分。下面的例子示范了如何讓Python中的一個(gè)函數能夠同時(shí)處理多種類(lèi)型的數據,在C++的對象模型中,這種多態(tài)被稱(chēng)為方法重載。


            class Polymorph:            def deal_int(self, arg):            print ‘%d is an integer‘ % arg            def deal_str(self, arg):            print ‘%s is a string‘ % arg            def deal(self, arg):            if type(arg) == type(1):            self.deal_int(arg)            elif type(arg) == type(‘ ‘):            self.deal_str(arg)            else:            print ‘%s is not an integer or a string‘ % arg            

這樣,Polymorph類(lèi)中的方法deal就可以同時(shí)處理數字和字符串了:


>>> p = Polymorph()            >>> p.deal(100)            100 is an integer            >>> p.deal("Hello World!")            Hello World! is a string            

4.5 可見(jiàn)性

Python對象模型對可見(jiàn)性的處理與C++和Java完全不同。在C++和Java中,如果屬性或者方法被聲明為private,那就意味著(zhù)它們只能在類(lèi)中被訪(fǎng)問(wèn),而如果被聲明為protected,則只有該類(lèi)或者其子類(lèi)中的代碼能夠訪(fǎng)問(wèn)這些屬性和方法。但在Python對象模型中,所有屬性和方法都是public的,也就是說(shuō)數據沒(méi)有做相應的保護,你可以在任何地方對它們進(jìn)行任意的修改。

能夠對可見(jiàn)性進(jìn)行約束是面向對象編程的一個(gè)重要特點(diǎn),其目的是使對象具有優(yōu)良的封裝性:對象僅僅向外界提供訪(fǎng)問(wèn)接口,而內部實(shí)現細節則被很好地隱藏起來(lái)。奇怪的是作為一門(mén)面向對象腳本語(yǔ)言,Python并沒(méi)有提供對可見(jiàn)性進(jìn)行約束的機制,所有屬性和方法對任何人都是可見(jiàn)的,任何人想知道對象的內部實(shí)現細節都是可能的。雖然這樣做能夠帶來(lái)部分效率上的優(yōu)化,但卻無(wú)法阻止其它程序員對已經(jīng)封裝好的類(lèi)進(jìn)行破壞,從某種程度上這不得不說(shuō)是Python帶給我們的一絲的缺憾。

直到Python 1.5,Guido才引入了名字壓縮(name mangling)的概念,使得類(lèi)中的一些屬性得以局部化。在進(jìn)行定義類(lèi)時(shí),如果一個(gè)屬性的名稱(chēng)是以?xún)蓚€(gè)下劃線(xiàn)開(kāi)始,同時(shí)又不是以下劃線(xiàn)結束的,那么它在編譯時(shí)將自動(dòng)地被改寫(xiě)為類(lèi)名加上屬性名。例如:


class Greeting:            __data = "Hello World!"            def __init__(self, str):            Greeting.__data = str            >>> g = Greeting("Hello Gary!")            >>> dir (g)            [‘_Greeting__data‘, ‘__doc__‘, ‘__init__‘, ‘__module__‘]            

從上面的顯示結果可以看出,Greeting類(lèi)的屬性__data變成了_Greeting__data。雖然這樣仍然無(wú)法阻止外界對它的訪(fǎng)問(wèn),但的確使得訪(fǎng)問(wèn)變得不再那么直接了,從而在一定程序上保護了類(lèi)中的數據不被外界破壞。





回頁(yè)首


五、在Python中應用設計模式

《設計模式》一書(shū)總結了23個(gè)模式,依據各自的目的又被分為創(chuàng )建型模式(creational pattern)、結構型模式(structural pattern)和行為型模式(behavioral patterns),它們分別從對象的創(chuàng )建,對象和對象間的結構關(guān)系以及對象之間如何交互這三個(gè)方面入手,對面向對象系統建模方法給予了解釋和指導。

  • 創(chuàng )建型模式描述怎樣創(chuàng )建一個(gè)對象,以及如何隱藏對象創(chuàng )建的細節,從而使得程序代碼不依賴(lài)于具體的對象,這樣在增加一個(gè)新的對象時(shí)對代碼的改動(dòng)非常小。
  • 結構型模式描述類(lèi)和對象之間如何進(jìn)行有效的組織,形成良好的軟件體系結構,主要的方法是使用繼承關(guān)系來(lái)組織各個(gè)類(lèi)。
  • 行為型模式描述類(lèi)或對象之間如何交互以及如何分配職責,實(shí)際上它所牽涉的不僅僅是類(lèi)或對象的設計模式,還有它們之間的通訊模式。

這些設計模式如果能夠在Python中直接應用的話(huà),對所有Python程序員來(lái)講毫無(wú)疑問(wèn)將是一筆非常寶貴的財富,因為它們的正確性和有效性已經(jīng)被無(wú)數次的實(shí)踐所驗證過(guò)了。如果想在Python中靈活地運行這些設計模式,可以遵循下面的幾個(gè)步驟:

  1. 接受設計模式
  2. 識別設計模式
  3. 運用設計模式

首先,你應該認識到設計模式的確能夠改善你所設計的軟件。其次,你必須仔細研究每一種設計模式,學(xué)習如何在Python中應用這些模式,以便在今后需要時(shí)能夠用到它們。最后,你要努力做到對各個(gè)設計模式都有非常清晰的認識,最好能夠形成自己的獨到見(jiàn)解,清楚哪個(gè)模式能夠解決哪個(gè)設計上的問(wèn)題,并將它們真正應用到你用Python開(kāi)發(fā)的軟件中去。所有的設計模式都來(lái)源于實(shí)踐,最終也將付諸于實(shí)踐,只有通過(guò)實(shí)踐中你才可能掌握每個(gè)模式的精髓所在。





回頁(yè)首


六、小結

設計模式就是解決軟件開(kāi)發(fā)和設計過(guò)程中某個(gè)特定問(wèn)題的特定方法,它最初起源于建筑設計,目前已經(jīng)被廣泛地應用在軟件開(kāi)發(fā)領(lǐng)域中。設計模式是軟件復用的一種特定形式,理論上它與具體的語(yǔ)言無(wú)關(guān),但實(shí)際應用時(shí)通常會(huì )依賴(lài)于語(yǔ)言所提供的某些特性,Python是一門(mén)優(yōu)秀的面向對象腳本語(yǔ)言,它的對象模型會(huì )影響到部分設計模式的實(shí)現。設計模式按其目的可以被劃分成不同的種類(lèi),分別用于解決不同方面的實(shí)際問(wèn)題。



參考資料

  1. 《面向模式的軟件體系結構 卷1:模式系統》,Frank Buschmann等著(zhù),賁可榮等譯,北京:機械工業(yè)出版,2003。
  2. 《設計模式 可復用面向對象軟件的基礎》,Erich Gamma等著(zhù),李英軍等譯,北京:機械工業(yè)出版,2000。
  3. 《深入學(xué)習:Python程序開(kāi)發(fā)》,Andre Lessa著(zhù),張曉暉等譯,北京:電子工業(yè)出版社,2001。
  4. 《Python語(yǔ)言入門(mén)》,Mark Lutz等著(zhù),陳革等譯,2001。
  5. 從Python官方網(wǎng)站( http://www.python.org)上可以了解到所有關(guān)于Python的知識。
  6. 在網(wǎng)站 http://hillside.net/patterns/上可以了解到許多與模式相關(guān)的信息。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
采用設計模式使您的應用程序合理化
Python進(jìn)階(上)PDF原創(chuàng )資料發(fā)布
python中類(lèi)及其實(shí)例詳解
思維導圖:python面向對象(搞笑案例)
iOS開(kāi)發(fā)之理解iOS中的MVC設計模式
Revit|關(guān)于基礎知識選講
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久