日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Python 實(shí)現(xiàn)命令模式、中介者模式和解釋器模式

來源: 責(zé)編: 時(shí)間:2024-06-05 17:40:25 251觀看
導(dǎo)讀今天介紹三種行為型設(shè)計(jì)模式:命令模式、中介者模式和解釋器模式。1.命令模式它將請求封裝成一個(gè)對象,從而使得可以用不同的請求對客戶進(jìn)行參數(shù)化。命令模式也支持撤銷操作。(1) 命令模式的結(jié)構(gòu)命令模式的核心是命令對象

今天介紹三種行為型設(shè)計(jì)模式:命令模式、中介者模式和解釋器模式。vfT28資訊網(wǎng)——每日最新資訊28at.com

vfT28資訊網(wǎng)——每日最新資訊28at.com

1.命令模式

它將請求封裝成一個(gè)對象,從而使得可以用不同的請求對客戶進(jìn)行參數(shù)化。命令模式也支持撤銷操作。vfT28資訊網(wǎng)——每日最新資訊28at.com

(1) 命令模式的結(jié)構(gòu)vfT28資訊網(wǎng)——每日最新資訊28at.com

命令模式的核心是命令對象和接收者對象之間的關(guān)系。命令對象封裝了一個(gè)特定的請求,包含了執(zhí)行該請求的方法。接收者對象負(fù)責(zé)實(shí)際執(zhí)行請求。vfT28資訊網(wǎng)——每日最新資訊28at.com

以下是命令模式的基本結(jié)構(gòu):vfT28資訊網(wǎng)——每日最新資訊28at.com

# 命令對象接口class Command:    def execute(self):        pass    def undo(self):        pass# 具體命令對象類class ConcreteCommandA(Command):    def __init__(self, receiver):        self.receiver = receiver    def execute(self):        self.receiver.action_a()    def undo(self):        self.receiver.undo_action_a()class ConcreteCommandB(Command):    def __init__(self, receiver):        self.receiver = receiver    def execute(self):        self.receiver.action_b()    def undo(self):        self.receiver.undo_action_b()# 接收者對象類class Receiver:    def action_a(self):        print("接收者執(zhí)行動(dòng)作A")    def action_b(self):        print("接收者執(zhí)行動(dòng)作B")    def undo_action_a(self):        print("接收者撤銷動(dòng)作A")    def undo_action_b(self):        print("接收者撤銷動(dòng)作B")# 客戶端代碼if __name__ == "__main__":    receiver = Receiver()    command_a = ConcreteCommandA(receiver)    command_b = ConcreteCommandB(receiver)    invoker = Invoker()    invoker.set_command(command_a)    invoker.execute_command()    invoker.set_command(command_b)    invoker.execute_command()

(2) 命令模式的應(yīng)用場景vfT28資訊網(wǎng)——每日最新資訊28at.com

命令模式適用于以下場景:vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 需要將請求的發(fā)送者和接收者解耦,使得它們可以獨(dú)立地變化。
  • 需要支持撤銷操作。

(3) 命令模式的優(yōu)點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 命令模式將請求的發(fā)送者和接收者解耦,使得它們可以獨(dú)立地變化。
  • 命令模式支持撤銷操作。
  • 命令模式遵循開閉原則,新的命令對象可以很容易地添加到系統(tǒng)中,而不會(huì)影響到原有的代碼。

(4) 命令模式的缺點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 命令模式中,命令對象和接收者對象之間存在循環(huán)依賴的關(guān)系,可能會(huì)導(dǎo)致循環(huán)引用的問題。

2.中介者模式

它通過封裝一系列對象之間的交互,將對象之間的耦合度降低到最低。中介者模式將對象之間的交互轉(zhuǎn)移給中介者對象,從而使得對象之間不再直接相互引用。vfT28資訊網(wǎng)——每日最新資訊28at.com

(1) 中介者模式的結(jié)構(gòu)vfT28資訊網(wǎng)——每日最新資訊28at.com

中介者模式的核心是中介者對象,它封裝了一系列對象之間的交互邏輯。中介者對象通常包含一個(gè)或多個(gè)接口,用于與其他對象進(jìn)行通信。vfT28資訊網(wǎng)——每日最新資訊28at.com

以下是中介者模式的基本結(jié)構(gòu):vfT28資訊網(wǎng)——每日最新資訊28at.com

# 中介者接口class Mediator:    def send(self, message, colleague):        pass# 同事類接口class Colleague:    def set_mediator(self, mediator):        pass    def send(self, message):        pass    def receive(self, message):        pass# 具體中介者類class ConcreteMediator(Mediator):    def __init__(self):        self.colleague_a = None        self.colleague_b = None    def set_colleague_a(self, colleague_a):        self.colleague_a = colleague_a    def set_colleague_b(self, colleague_b):        self.colleague_b = colleague_b    def send(self, message, colleague):        if colleague == self.colleague_a:            self.colleague_b.receive(message)        elif colleague == self.colleague_b:            self.colleague_a.receive(message)# 具體同事類class ConcreteColleagueA(Colleague):    def __init__(self, mediator):        self.mediator = mediator    def set_mediator(self, mediator):        self.mediator = mediator    def send(self, message):        self.mediator.send(message, self)    def receive(self, message):        print("同事A收到消息:", message)class ConcreteColleagueB(Colleague):    def __init__(self, mediator):        self.mediator = mediator    def set_mediator(self, mediator):        self.mediator = mediator    def send(self, message):        self.mediator.send(message, self)    def receive(self, message):        print("同事B收到消息:", message)# 客戶端代碼if __name__ == "__main__":    mediator = ConcreteMediator()    colleague_a = ConcreteColleagueA(mediator)    colleague_b = ConcreteColleagueB(mediator)    mediator.set_colleague_a(colleague_a)    mediator.set_colleague_b(colleague_b)    colleague_a.send("Hello, colleague B!")    colleague_b.send("Hi, colleague A!")

(2) 中介者模式的應(yīng)用場景vfT28資訊網(wǎng)——每日最新資訊28at.com

中介者模式適用于以下場景:vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 一組對象之間存在復(fù)雜的交互關(guān)系,導(dǎo)致對象之間的耦合度較高。
  • 要求對象之間的交互邏輯可以靈活地改變,而不需要修改對象之間的引用關(guān)系。

(3) 中介者模式的優(yōu)點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 中介者模式將對象之間的交互邏輯封裝到中介者對象中,從而使得對象之間的耦合度降低到最低。
  • 中介者模式使得對象之間的交互邏輯可以靈活地改變,而不需要修改對象之間的引用關(guān)系。
  • 中介者模式遵循開閉原則,新的同事類可以很容易地添加到系統(tǒng)中,而不會(huì)影響到原有的代碼。

(4) 中介者模式的缺點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 中介者模式中,中介者對象通常需要知道所有的同事類,可能會(huì)導(dǎo)致中介者對象的職責(zé)過重。

3.解釋器模式

它定義了一種語言的文法,并解析相應(yīng)的語句。解釋器模式通過定義語言的文法,將文法中的每個(gè)規(guī)則映射到一個(gè)類,然后通過遞歸的方式解析語句。vfT28資訊網(wǎng)——每日最新資訊28at.com

(1) 解釋器模式的結(jié)構(gòu)vfT28資訊網(wǎng)——每日最新資訊28at.com

解釋器模式的核心是解釋器類,它封裝了解釋語句的邏輯。解釋器類通常包含一個(gè)或多個(gè)解釋方法,用于解釋語句的不同部分。vfT28資訊網(wǎng)——每日最新資訊28at.com

以下是解釋器模式的基本結(jié)構(gòu):vfT28資訊網(wǎng)——每日最新資訊28at.com

# 抽象表達(dá)式類class AbstractExpression:    def interpret(self, context):        pass# 終結(jié)符表達(dá)式類class TerminalExpression(AbstractExpression):    def interpret(self, context):        # 解釋終結(jié)符表達(dá)式的邏輯        pass# 非終結(jié)符表達(dá)式類class NonterminalExpression(AbstractExpression):    def __init__(self):        self.expressions = []    def add_expression(self, expression):        self.expressions.append(expression)    def interpret(self, context):        # 解釋非終結(jié)符表達(dá)式的邏輯        for expression in self.expressions:            expression.interpret(context)# 上下文類class Context:    def __init__(self):        self.input = None        self.output = None# 客戶端代碼if __name__ == "__main__":    context = Context()    # 構(gòu)建語法樹    expression1 = TerminalExpression()    expression2 = NonterminalExpression()    expression3 = TerminalExpression()    expression2.add_expression(expression1)    expression2.add_expression(expression3)    # 解釋語句    expression2.interpret(context)

(2) 解釋器模式的應(yīng)用場景vfT28資訊網(wǎng)——每日最新資訊28at.com

解釋器模式適用于以下場景:vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 一種語言的文法比較簡單,且文法的規(guī)則可以通過類來表達(dá)。
  • 需要解析和執(zhí)行一種特定的語言。

(3) 解釋器模式的優(yōu)點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 解釋器模式將解釋語句的邏輯封裝到解釋器類中,使得解釋語句的邏輯可以靈活地改變。
  • 解釋器模式遵循開閉原則,新的解釋器類可以很容易地添加到系統(tǒng)中,而不會(huì)影響到原有的代碼。

(4) 解釋器模式的缺點(diǎn)vfT28資訊網(wǎng)——每日最新資訊28at.com

  • 解釋器模式中,解釋器類通常需要知道所有的語法規(guī)則,可能會(huì)導(dǎo)致解釋器類的職責(zé)過重。

本文鏈接:http://m.www897cc.com/showinfo-26-92108-0.htmlPython 實(shí)現(xiàn)命令模式、中介者模式和解釋器模式

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: .NET 中的數(shù)據(jù)交互:生成和讀取YAML文件

下一篇: Vite 是什么(并且為什么如此流行)?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久免费精品日本久久中文字幕| 亚洲激情图片小说视频| 欧美人在线观看| 欧美日韩亚洲91| 国产美女精品人人做人人爽| 国产日产欧美一区| 伊人婷婷欧美激情| 99精品视频一区二区三区| 亚洲影音一区| 久久久亚洲精品一区二区三区| 欧美成人免费播放| 国产精品久久久久久久久免费樱桃| 国产日韩在线看| 91久久中文字幕| 亚洲在线观看免费视频| 久久久久国产精品麻豆ai换脸| 欧美国产一区在线| 国产欧美一区二区精品婷婷 | 亚洲一区在线免费| 久久九九99| 欧美日韩精品一区二区三区四区| 国产精品视频一区二区高潮| 亚洲二区在线观看| 亚洲欧美激情四射在线日| 久久综合九色欧美综合狠狠| 国产精品爱久久久久久久| 在线观看福利一区| 亚洲欧美国产va在线影院| 欧美成年视频| 国产亚洲欧美一区二区三区| 亚洲精选在线| 久久婷婷av| 国产精品视频999| 亚洲精品国久久99热| 久久国产精品99久久久久久老狼 | 国产一二精品视频| 亚洲色诱最新| 欧美高清一区| 一区二区三区在线观看欧美| 亚洲男人第一网站| 欧美猛交免费看| 依依成人综合视频| 亚洲免费在线观看视频| 欧美大成色www永久网站婷| 国产欧美日韩亚州综合| 一本一道久久综合狠狠老精东影业 | 国产午夜久久久久| 亚洲视频成人| 欧美精品手机在线| 一区二区三区在线观看欧美| 亚洲视频精选| 欧美美女操人视频| 亚洲国产成人91精品| 久久精品视频在线观看| 国产精品久久毛片a| 夜夜嗨av一区二区三区免费区| 乱中年女人伦av一区二区| 国内精品模特av私拍在线观看| 亚洲欧美视频在线观看视频| 欧美日韩一区二区三| 亚洲精品欧美| 欧美搞黄网站| 亚洲国产一区在线| 久久亚洲私人国产精品va媚药| 国产日韩欧美麻豆| 性欧美大战久久久久久久久| 国产精品蜜臀在线观看| 一区二区三区精品视频在线观看| 欧美国产日韩免费| 亚洲欧洲日产国码二区| 男男成人高潮片免费网站| 怡红院av一区二区三区| 久久久美女艺术照精彩视频福利播放| 国产女优一区| 欧美一区二区三区免费大片| 国产精品网站一区| 午夜性色一区二区三区免费视频| 国产精品久久久久天堂| 亚洲男人的天堂在线aⅴ视频| 国产精品久久一卡二卡| 亚洲欧美精品在线观看| 国产精品在线看| 欧美亚洲综合另类| 国产一区日韩二区欧美三区| 久久精品在线| 一区在线视频观看| 免费在线国产精品| 亚洲免费av电影| 欧美日韩一区二区三区在线看| 这里只有精品视频| 国产精品免费aⅴ片在线观看| 先锋影音网一区二区| 国产亚洲日本欧美韩国| 久久久精品五月天| 亚洲高清二区| 欧美激情麻豆| 亚洲小说春色综合另类电影| 国产精品午夜国产小视频| 欧美有码在线观看视频| 狠狠色丁香久久婷婷综合_中| 鲁大师影院一区二区三区| 亚洲黄一区二区三区| 欧美日韩免费| 亚洲免费一在线| 国产午夜精品在线| 麻豆精品一区二区综合av| 亚洲精品日韩激情在线电影| 欧美日韩一区在线观看| 午夜免费久久久久| 伊人成人网在线看| 欧美日韩国产精品自在自线| 亚洲制服少妇| 一区二区在线观看视频在线观看| 欧美成人亚洲成人| 亚洲婷婷在线| 国内精品久久久久久| 欧美肥婆bbw| 亚洲一级黄色| 韩国一区电影| 欧美日韩精品一区二区天天拍小说 | 禁久久精品乱码| 欧美日本一道本在线视频| 亚洲欧美日韩国产精品| 在线播放不卡| 欧美三级午夜理伦三级中视频| 西瓜成人精品人成网站| 影音先锋日韩有码| 欧美视频一区二区在线观看| 欧美中文字幕不卡| 亚洲人成精品久久久久| 国产精品视频一区二区高潮| 老牛国产精品一区的观看方式| 一本大道av伊人久久综合| 国产一区二区三区免费观看 | 一色屋精品亚洲香蕉网站| 欧美日韩国产黄| 欧美中文字幕在线| 日韩午夜av| 国产视频不卡| 欧美理论片在线观看| 欧美在线高清| 亚洲免费观看高清完整版在线观看熊| 国产情侣一区| 欧美另类一区| 久久久一区二区三区| 亚洲午夜激情网站| 亚洲高清一区二| 国产精品亚洲аv天堂网| 欧美多人爱爱视频网站| 欧美有码在线观看视频| aa亚洲婷婷| 在线日韩中文| 国产精品美女主播| 欧美韩日一区| 久久精品官网| 亚洲自拍偷拍视频| 亚洲精选久久| 在线成人免费视频| 国产免费亚洲高清| 欧美日韩亚洲精品内裤| 美女999久久久精品视频| 欧美一区在线视频| 亚洲视频免费看| 亚洲国产精品成人一区二区 | 国产亚洲一区二区三区在线播放| 欧美人在线视频| 理论片一区二区在线| 欧美在线日韩在线| 亚洲午夜高清视频| 日韩视频免费观看高清在线视频| 影音先锋久久| 国产香蕉97碰碰久久人人| 欧美午夜剧场| 欧美精品在线观看播放| 美女被久久久| 久久在线免费观看| 久久精品成人欧美大片古装| 午夜精品成人在线| 亚洲色图自拍| 日韩视频不卡| 亚洲三级影片| 最新国产拍偷乱拍精品| 樱桃视频在线观看一区| 狠狠色狠狠色综合日日小说| 国产三级精品三级| 国产乱码精品一区二区三区av| 国产精品电影观看| 欧美丝袜一区二区| 欧美日韩日本国产亚洲在线| 欧美激情片在线观看| 欧美va天堂| 欧美xart系列高清| 欧美黄色日本| 欧美激情久久久久久| 欧美激情精品久久久久| 欧美伦理视频网站| 欧美啪啪一区| 欧美日韩国产综合一区二区| 欧美日韩国产91| 欧美日韩在线电影| 欧美日韩直播| 国产精品久久午夜夜伦鲁鲁| 国产精品久久久久久久久免费樱桃| 欧美性大战久久久久久久|