hashmap判斷key值是否相同_淺談HashMap以及重寫hashCode()和equals()方法
阿新 • • 發佈:2021-01-10
設計模式:工廠方法模式
定義
工廠方法模式(Factory Method Pattern)又稱為工廠模式,又稱工廠模式、多型工廠模式和虛擬構造器模式,它屬於類建立型模式。在工廠方法模式中,工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,這樣做的目的是將產品類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪一個具體產品類。
UML結構圖
定義介面類Creator
,繼承該類必須實現factoryMethod
方法。
ConcreteCreator
類繼承Creator
,根據具體業務邏輯來實現factoryMethod
方法。因此,工廠方法定義了一個介面來建立物件,但具體例項化哪個類則由它的子類決定。
使用場景
一家線上教育公司擁有一款備考四六級學習產品,叫做“四六級訓練營”,上線後廣受四六級備考生歡迎,強烈要求推出考研英語的學習產品,比如叫“考研訓練營”。於是相關專案組開始籌備考研訓練營的生產。分析來看,四六級訓練營和考研訓練營有許多相似的地方,不同的地方在於給使用者安排的學習課程不一樣。
我們可以定義一個訓練營抽象類,約定作為訓練營應該具備的功能,然後分別開發兩個子類四六級訓練營
和考研訓練營
來實現差異化功能。
from abc import ABCMeta, abstractmethod class Camp(metaclass=ABCMeta): def __init__(self): self.lessons = [] self.notice_board = [] self.notebook = "" self.join_camp() self.schedule_lesson() @abstractmethod def join_camp(self): # 加入訓練營 pass @abstractmethod def schedule_lesson(self): # 安排課程 pass def add_lesson(self, lesson): # 安排課程 self.lessons.append(lesson) def get_lessons(self): return self.lessons def notice_board(self): # 公告欄(釋出資訊、通知) pass def notebook(self): # 筆記本 pass class CETCamp(Camp): def join_camp(self): print("歡迎來到四六級訓練營") def schedule_lesson(self): self.add_lesson(CETReadLesson) self.add_lesson(CETListenLesson) class NPEECamp(Camp): def join_camp(self): print("歡迎來到考研訓練營") def schedule_lesson(self): self.add_lesson(NPEEReadLesson) self.add_lesson(NPEEWriteLesson) # # 定義課程 # class Lesson(metaclass=ABCMeta): @abstractmethod def lecture(self): # 講課 pass @abstractmethod def exercise(self): # 練習 pass class CETReadLesson(Lesson): def lecture(self): print("今天我們學習《四六級閱讀考試講解》") def exercise(self): print("請完成《四六級閱讀訓練》") class CETListenLesson(Lesson): def lecture(self): print("今天我們學習《四六級聽力考試講解》") def exercise(self): print("請完成《四六級聽力訓練》") class NPEEReadLesson(Lesson): def lecture(self): print("今天我們學習《考研閱讀考試講解》") def exercise(self): print("請完成《考研閱讀訓練》") class NPEEWriteLesson(Lesson): def lecture(self): print("今天我們學習《考研寫作考試講解》") def exercise(self): print("請完成《考研寫作訓練》") if __name__ == "__main__": cet_camp = CETCamp() print(cet_camp.get_lessons()) npee_camp = NPEECamp() print(npee_camp.get_lessons())
輸出
歡迎來到四六級訓練營
[<class '__main__.CETReadLesson'>, <class '__main__.CETListenLesson'>]
歡迎來到考研訓練營
[<class '__main__.NPEEReadLesson'>, <class '__main__.NPEEWriteLesson'>]