工廠模式

概念
  • 純虛函數(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容