概念
- 純虛函數(shù):是為了實現(xiàn)一個接口,起到一個規(guī)范的作用,規(guī)范繼承這個類的程序員必須實現(xiàn)這個函數(shù),純虛函數(shù)本身沒有實現(xiàn)本體
- 抽象類:稱帶有純虛函數(shù)的類為抽象類
- 抽象類的作用:抽象類的主要作用是將有關(guān)的操作作為結(jié)果接口組織在一個繼承層次結(jié)構(gòu)中,由它來為派生類提供一個公共的根,派生類將具體實現(xiàn)在其基類中作為接口的操作。所以派生類實際上刻畫了一組子類的操作接口的通用語義,這些語義也傳給子類,子類可以具體實現(xiàn)這些語義,也可以再將這些語義傳給自己的子類。
- 使用抽象類時注意:
a、抽象類只能作為基類來使用,其純虛函數(shù)的實現(xiàn)由派生類給出。如果派生類中沒有重新定義純虛函數(shù),而只是繼承基類的純虛函數(shù),則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數(shù)的實現(xiàn),則該派生類就不再是抽象類了,它是一個可以建立對象的具體的類。
b、抽象類是不能定義對象的。
@dataclass
class Operation(ABC):
_numberA:Number,_numberB:Number=1,2
@abstractmethod
def GetResult(self):
result=0
pdb.set_trace()
return result
圖中【Operation】方法是抽象類, 【GetResult()】的方法是純虛函數(shù)。為了統(tǒng)一接口而產(chǎn)生,起規(guī)范作用,具體看實現(xiàn)。
工廠模式(Factory Pattern)
設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式
優(yōu)點:
1、一個調(diào)用者想創(chuàng)建一個對象,只要知道其名稱就可以了。
2、擴展性高,如果想增加一個產(chǎn)品,只要擴展一個工廠類就可以。
3、屏蔽產(chǎn)品的具體實現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
缺點:
每次增加一個產(chǎn)品時,都需要增加一個具體類和對象實現(xiàn)工廠,使得系統(tǒng)中類的個數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時也增加了系統(tǒng)具體類的依賴。這并不是什么好事。
簡單的工廠模式
目的:為了減少實力化的對象,則需要考慮創(chuàng)造一個簡單的工廠類。
@dataclass
class OperationFactory():
def createOpeation(self,operation):
operationList = {
"add": OperationAdd(),
"sub": OperationSub(),
"mul": OperationMul(),
"div": OperationDiv()
}
if not operationList.get(operation):
raise "清輸入正確的"
return operationList[operation]
備注:使用工廠模式,進行分類算法,但是由于每次新增一個方法,都是需要修改原來的方法,違反了開閉原則,所以優(yōu)化-抽象工廠模式
@dataclass
class OperationFactory(ABC):
@abstractmethod
def createOpeation(self):
pass
把工廠類抽象出來,減少對工廠類變更--》具體實現(xiàn):factory_abstract.py
使用場景
所感:已經(jīng)知道實現(xiàn)的功能,然后把功能類似的部分抽象出來。例如測試方法中,點擊、輸入等操作,都可以統(tǒng)一作為一個操作類。新增其他操作,不需要知道已經(jīng)封住好的點擊類,只關(guān)心新增操作。缺點,需要新增很多類,以后策略會慢慢優(yōu)化,(重新學(xué)習(xí)模式,不對的請指出)
模式的源碼地址:
簡單的工廠模式:https://github.com/michaelia/python_study/blob/master/Design_pattern/simple_factory/simple_factory.py
抽象工廠模式:https://github.com/michaelia/python_study/blob/master/Design_pattern/simple_factory/factory_abstract.py