# 定義車類
class car(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義乙個銷售車的店類
class carstore(object):
def order(self):
self.car = car() #找一輛車
self.car.move()
self.car.stop()
上面的4s店,只能銷售那一種型別的車如果這個是個銷售北京現代品牌的車,比如伊蘭特、索納塔等,該怎樣做呢?
# 定義伊蘭特車類
class yilantecar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義索納塔車類
class suonatacar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義乙個銷售北京現代車的店類
class carstore(object):
def order(self, typename):
#根據客戶的不同要求,生成不同的型別的車
if typename == "伊蘭特":
car = yilantecar()
elif typename == "索納塔":
car = suonatacar()
return car
這樣做,不太好,因為當北京現代又生產一種新型別的車時,又得在carstore類中修改,有沒有好的解決辦法呢?當買車時,有很多種品牌可以選擇,比如北京現代、別克、凱迪拉克、特斯拉等,那麼此時該怎樣進行設計呢?# 定義伊蘭特車類
class yilantecar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義索納塔車類
class suonatacar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 用來生成具體的物件
def createcar(typename):
if typename == "伊蘭特":
car = yilantecar()
elif typename == "索納塔":
car = suonatacar()
return car
# 定義乙個銷售北京現代車的店類
class carstore(object):
def order(self, typename):
# 讓工廠根據型別,生產一輛汽車
car = createcar(typename)
return car
car1=carstore()
car=car1.order("伊蘭特")
car.stop()
car.move()
d:\anaconda\python.exe e:/pythonwork/黑馬/設計汽車.py
---停車---
---車在移動---
process finished with exit code 0
咋一看來,好像只是把生產環節重新建立了乙個類,這確實比較像是一種程式設計習慣,此種解決方式被稱作簡單工廠模式# 定義伊蘭特車類
class yilantecar(object):
# 定義車的方法
def move(self):
print("---1---")
def stop(self):
print("---停車---")
# 定義索納塔車類
class suonatacar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義乙個生產汽車的工廠,讓其根據具體的訂單生產車
class ca***ctory(object):
def createcar(self, typename):
if typename == "伊蘭特":
car = yilantecar()
elif typename == "索納塔":
car = suonatacar()
return car
# 定義乙個銷售北京現代車的店類
class carstore(object):
def __init__(self):
# 設定4s店的指定生產汽車的工廠
self.ca***ctory = ca***ctory()
def order(self, typename):
# 讓工廠根據型別,生產一輛汽車
car = self.ca***ctory.createcar(typename)
return car
car=carstore()
car1=car.order("伊蘭特")
car1.move()
工廠函式、工廠類對具體的生成環節進行了封裝,這樣有利於**的後需擴充套件,即把功能劃分的更具體,4s店只負責銷售,汽車廠只負責製造
# 定義乙個基本的4s店類
class carstore(object):
#僅僅是定義了有這個方法,並沒有實現,具體功能,這個需要在子類中實現
def createcar(self, typename):
pass
def order(self, typename):
# 讓工廠根據型別,生產一輛汽車
self.car = self.createcar(typename)
self.car.move()
self.car.stop()
# 定義乙個北京現代4s店類
class xiandaicarstore(carstore):
def createcar(self, typename):
self.ca***ctory = ca***ctory()
return self.ca***ctory.createcar(typename)
# 定義伊蘭特車類
class yilantecar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義索納塔車類
class suonatacar(object):
# 定義車的方法
def move(self):
print("---車在移動---")
def stop(self):
print("---停車---")
# 定義乙個生產汽車的工廠,讓其根據具體得訂單生產車
class ca***ctory(object):
def createcar(self,typename):
self.typename = typename
if self.typename == "伊蘭特":
self.car = yilantecar()
elif self.typename == "索納塔":
self.car = suonatacar()
return self.car
suonata = xiandaicarstore()
suonata.order("索納塔")
定義了乙個建立物件的介面
(可以理解為函式),但由子類決定要例項化的類是哪乙個,工廠方法模式讓類的例項化推遲到子類,抽象的carstore提供了乙個建立物件的方法createcar,也叫作工廠方法
。子類真正實現這個createcar方法建立出具體產品。 建立者類不需要直到實際建立的產品是哪乙個,選擇了使用了哪個子類,自然也就決定了實際建立的產品是什麼。
Python之物件導向 物件導向基礎
一 面向過程 物件導向對比 1 面向過程 根據業務邏輯從上到下寫壘 2 函式式思想 將某功能 封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 3 物件導向 對函式進行分類和封裝 1 2 3一步一步抽象,函式式是走向物件導向的中間步驟 函式式的應用場景 各個函式之間是獨立且無共用的資料 物件導向程式...
Python 基礎之物件導向
封裝繼承 類和型別 多型意味著就算不知道變數所引用的物件型別是什麼,還是能對它進行操作,而它也會根據物件 或者類 型別的不同而表現出不同的行為。程式得到了乙個物件,但是並不知道它是怎麼實現的 它可能有多種 形狀 繫結到物件特性上面的函式稱為方法 method 對於乙個變數x來說,我們不需要知道他是字...
Python 基礎之物件導向
python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...