成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 實現命令模式、中介者模式和解釋器模式

開發
今天我們將介紹 Python 中三種行為型設計模式:命令模式、中介者模式和解釋器模式。

今天介紹三種行為型設計模式:命令模式、中介者模式和解釋器模式。

1.命令模式

它將請求封裝成一個對象,從而使得可以用不同的請求對客戶進行參數化。命令模式也支持撤銷操作。

(1) 命令模式的結構

命令模式的核心是命令對象和接收者對象之間的關系。命令對象封裝了一個特定的請求,包含了執行該請求的方法。接收者對象負責實際執行請求。

以下是命令模式的基本結構:

# 命令對象接口
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("接收者執行動作A")

    def action_b(self):
        print("接收者執行動作B")

    def undo_action_a(self):
        print("接收者撤銷動作A")

    def undo_action_b(self):
        print("接收者撤銷動作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) 命令模式的應用場景

命令模式適用于以下場景:

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

(3) 命令模式的優點

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

(4) 命令模式的缺點

  • 命令模式中,命令對象和接收者對象之間存在循環依賴的關系,可能會導致循環引用的問題。

2.中介者模式

它通過封裝一系列對象之間的交互,將對象之間的耦合度降低到最低。中介者模式將對象之間的交互轉移給中介者對象,從而使得對象之間不再直接相互引用。

(1) 中介者模式的結構

中介者模式的核心是中介者對象,它封裝了一系列對象之間的交互邏輯。中介者對象通常包含一個或多個接口,用于與其他對象進行通信。

以下是中介者模式的基本結構:

# 中介者接口
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) 中介者模式的應用場景

中介者模式適用于以下場景:

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

(3) 中介者模式的優點

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

(4) 中介者模式的缺點

  • 中介者模式中,中介者對象通常需要知道所有的同事類,可能會導致中介者對象的職責過重。

3.解釋器模式

它定義了一種語言的文法,并解析相應的語句。解釋器模式通過定義語言的文法,將文法中的每個規則映射到一個類,然后通過遞歸的方式解析語句。

(1) 解釋器模式的結構

解釋器模式的核心是解釋器類,它封裝了解釋語句的邏輯。解釋器類通常包含一個或多個解釋方法,用于解釋語句的不同部分。

以下是解釋器模式的基本結構:

# 抽象表達式類
class AbstractExpression:
    def interpret(self, context):
        pass

# 終結符表達式類
class TerminalExpression(AbstractExpression):
    def interpret(self, context):
        # 解釋終結符表達式的邏輯
        pass

# 非終結符表達式類
class NonterminalExpression(AbstractExpression):
    def __init__(self):
        self.expressions = []

    def add_expression(self, expression):
        self.expressions.append(expression)

    def interpret(self, context):
        # 解釋非終結符表達式的邏輯
        for expression in self.expressions:
            expression.interpret(context)

# 上下文類
class Context:
    def __init__(self):
        self.input = None
        self.output = None

# 客戶端代碼
if __name__ == "__main__":
    context = Context()

    # 構建語法樹
    expression1 = TerminalExpression()
    expression2 = NonterminalExpression()
    expression3 = TerminalExpression()

    expression2.add_expression(expression1)
    expression2.add_expression(expression3)

    # 解釋語句
    expression2.interpret(context)

(2) 解釋器模式的應用場景

解釋器模式適用于以下場景:

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

(3) 解釋器模式的優點

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

(4) 解釋器模式的缺點

  • 解釋器模式中,解釋器類通常需要知道所有的語法規則,可能會導致解釋器類的職責過重。
責任編輯:趙寧寧 來源: Python技術
相關推薦

2021-07-20 08:52:20

命令模式中介者模式設計模式

2020-11-05 09:38:07

中介者模式

2023-05-26 08:41:23

模式Go設計模式

2020-11-09 08:20:33

解釋器模式

2023-05-15 08:51:46

解釋器模式定義

2021-07-07 10:31:19

對象池模式解釋器模式設計模式

2010-04-21 08:38:18

解釋器模式PHP設計模式

2024-06-04 13:11:52

Python行為設計模式開發

2023-10-07 00:17:06

AirDrop中介者模式

2024-04-10 12:27:43

Python設計模式開發

2023-03-03 08:12:07

設計模式語言

2020-10-20 13:33:00

建造者模式

2021-10-26 00:21:19

設計模式建造者

2020-11-03 13:05:18

命令模式

2023-05-04 08:47:31

命令模式抽象接口

2023-12-13 13:28:16

裝飾器模式Python設計模式

2024-04-12 12:10:18

Python設計模式開發

2020-12-01 07:16:05

重學設計模式

2021-01-21 05:34:14

設計模式建造者

2020-10-26 08:45:39

觀察者模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99re在线| 色欧美片视频在线观看 | 欧美视频免费在线 | 欧美群妇大交群中文字幕 | 久久久精品影院 | 国产精品一区二区三区久久 | 国产福利在线视频 | 一区二区影院 | 国产精品久久久久久中文字 | 久久国产高清 | 亚洲精视频 | 99热激情 | 精品一区二区三区在线观看国产 | 亚洲综合日韩精品欧美综合区 | 国产精品久久777777 | 密室大逃脱第六季大神版在线观看 | 视频1区 | 亚洲男人的天堂网站 | 日本高清不卡视频 | 欧美欧美欧美 | 九九九精品视频 | 久草新视频 | 精品粉嫩aⅴ一区二区三区四区 | 一区二区视频在线观看 | 日韩综合色 | 国产一区精品 | 国产在线精品一区二区三区 | 成年视频在线观看福利资源 | avtt国产| 日韩电影免费观看中文字幕 | 日韩免费在线 | 天天天操 | av在线播放国产 | 久草中文在线 | 久久一区精品 | 国内精品一区二区三区 | 国产乱码精品一区二区三区五月婷 | 日韩欧美在线观看视频网站 | 国产精品一区久久久 | 日本不卡视频在线播放 | 一级黄在线观看 |