一、設計模式_工廠模式實現(xiàn)
設計模式是面向對象語言特有的內容,是我們在面臨某一類問題時候固定的做法,設計模式有很多種,比較流行的是:GOF(Goup Of Four)23種設計模式。當然,我們沒有必要全部學習,學習幾個常用的即可。
對于初學者,我們學習兩個最常用的模式:工廠模式和單例模式。
工廠模式實現(xiàn)了創(chuàng)建者和調用者的分離,使用專門的工廠類將選擇實現(xiàn)類、創(chuàng)建對象進行統(tǒng)一的管理和控制。
#工廠模式
?
class CarFactory:
def createCar(self,brand):
if brand == "奔馳":
return Benz()
elif brand == "寶馬":
return BMW()
elif brand == '比亞迪':
return BYD()
else:
return "未知品牌,無法創(chuàng)建"
?
?
class Benz:
pass
?
?
class BMW:
pass
?
?
class BYD:
pass
?
factory = CarFactory()
c1 = factory.createCar("奔馳")
c2 = factory.createCar("寶馬")
print(c1)
print(c2)
?運行結果:
<__main__.Benz object at 0x021C5770>
<__main__.BMW object at 0x021C5790>
二、設計模式_單例模式實現(xiàn)
單例模式(Singleton Pattern)的核心作用是確保一個類只有一個實例,并且提供一個訪問該實例的全局訪問點。
單例模式只生成一個實例對象,減少了對系統(tǒng)資源的開銷。當一個對象的產生需要比較多的資源,如讀取配置文件、產生其他依賴對象時,可以產生一個“單例對象”,然后永久駐留內存中,從而極大的降低開銷。
??單例模式有多種實現(xiàn)的方式,我們這里推薦重寫
__new__()
的方法。
#單例模式
?
class MySingleton:
__obj = None
__init_flag = True
?
def __new__(cls, *args, **kwargs):
if cls.__obj == None:
cls.__obj = object.__new__(cls)
?
return cls.__obj
?
def __init__(self,name):
if MySingleton.__init_flag:
print("init....")
self.name = name
MySingleton.__init_flag = False
?
a = MySingleton("aa")
print(a)
b = MySingleton("bb")
print(b)
?運算結果:
init....
<__main__.MySingleton object at 0x01E15610>
<__main__.MySingleton object at 0x01E15610>
三、工廠和單例模式結合
設計模式稱之為“模式”,就是一些固定的套路。我們很容易用到其他場景上,比如前面講的工廠模式,我們需要將工廠類定義成“單例”,只需要簡單的套用即可實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-703536.html
#測試工廠模式和單例模式的整合使用
class CarFactory:
__obj = None #類屬性
__init_flag = True
?
?
def create_car(self,brand):
if brand =="奔馳":
return Benz()
elif brand =="寶馬":
return BMW()
elif brand == "比亞迪":
return BYD()
else:
return "未知品牌,無法創(chuàng)建"
?
?
def __new__(cls, *args, **kwargs):
if cls.__obj ==None:
cls.__obj = object.__new__(cls)
?
return cls.__obj
?
def __init__(self):
if CarFactory.__init_flag:
print("init CarFactory....")
CarFactory.__init_flag = False
?
class Benz:
pass
?
class BMW:
pass
?
class BYD:
pass
?
factory = CarFactory()
c1 = factory.create_car("奔馳")
c2 = factory.create_car("比亞迪")
print(c1)
print(c2)
?
factory2 = CarFactory()
print(factory)
print(factory2)
?運算結果:文章來源地址http://www.zghlxwxcb.cn/news/detail-703536.html
init CarFactory....
<__main__.Benz object at 0x01E36E90>
<__main__.BYD object at 0x01E36C30>
<__main__.CarFactory object at 0x01E36730>
<__main__.CarFactory object at 0x01E36730>
到了這里,關于Python之設計模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!