{"id":10021258,"date":"2026-02-19T12:38:40","date_gmt":"2026-02-19T04:38:40","guid":{"rendered":"https:\/\/itmax.cn\/?p=10021258"},"modified":"2026-02-19T12:38:40","modified_gmt":"2026-02-19T04:38:40","slug":"python-%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e5%ae%9e%e6%88%98%ef%bc%9a23-%e7%a7%8d%e6%a8%a1%e5%bc%8f%e5%9c%ba%e6%99%af%e5%8c%96%e8%90%bd%e5%9c%b0","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10021258","title":{"rendered":"Python \u8bbe\u8ba1\u6a21\u5f0f\u5b9e\u6218\uff1a23 \u79cd\u6a21\u5f0f\u573a\u666f\u5316\u843d\u5730"},"content":{"rendered":"<h2>Python \u8bbe\u8ba1\u6a21\u5f0f\u5b9e\u6218\uff1a23 \u79cd\u6a21\u5f0f\u573a\u666f\u5316\u843d\u5730<\/h2>\n<p>\u8bbe\u8ba1\u6a21\u5f0f\u662f\u8f6f\u4ef6\u5de5\u7a0b\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\uff0cPython \u4f5c\u4e3a\u4e00\u95e8\u7075\u6d3b\u7684\u8bed\u8a00\uff0c\u4e3a\u5404\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u7684\u5b9e\u73b0\u63d0\u4f9b\u4e86\u4f18\u96c5\u7684\u8bed\u6cd5\u652f\u6301\u3002\u672c\u6587\u5c06\u901a\u8fc7\u5b9e\u9645\u573a\u666f\u6df1\u5165\u8bb2\u89e3 23 \u79cd\u8bbe\u8ba1\u6a21\u5f0f\u5728 Python \u4e2d\u7684\u843d\u5730\u5e94\u7528\uff0c\u5e2e\u52a9\u8bfb\u8005\u638c\u63e1\u8bbe\u8ba1\u6a21\u5f0f\u7684\u5b9e\u9645\u8fd0\u7528\u3002<\/p>\n<h3>\u521b\u5efa\u578b\u6a21\u5f0f<\/h3>\n<p>\u521b\u5efa\u578b\u6a21\u5f0f\u5173\u6ce8\u5bf9\u8c61\u7684\u521b\u5efa\u8fc7\u7a0b\uff0c\u63d0\u4f9b\u4e86\u7075\u6d3b\u7684\u5bf9\u8c61\u521b\u5efa\u673a\u5236\u3002<\/p>\n<h4>\u5355\u4f8b\u6a21\u5f0f<\/h4>\n<p>\u5355\u4f8b\u6a21\u5f0f\u786e\u4fdd\u4e00\u4e2a\u7c7b\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u63d0\u4f9b\u5168\u5c40\u8bbf\u95ee\u70b9\u3002<\/p>\n<pre><code class=\"python\">class Singleton:\n    _instance = None\n    \n    def __new__(cls):\n        if cls._instance is None:\n            cls._instance = super().__new__(cls)\n            cls._instance.initialized = False\n        return cls._instance\n    \n    def __init__(self):\n        if not self.initialized:\n            self.value = 0\n            self.initialized = True\n\ndef singleton_demo():\n    print(&quot;\u5355\u4f8b\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    s1 = Singleton()\n    s2 = Singleton()\n    \n    print(f&quot;s1 is s2: {s1 is s2}&quot;)\n    print(f&quot;s1.value: {s1.value}&quot;)\n    \n    s1.value = 100\n    print(f&quot;s2.value: {s2.value}&quot;)\n\nsingleton_demo()<\/code><\/pre>\n<h4>\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f<\/h4>\n<p>\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u5b9a\u4e49\u521b\u5efa\u5bf9\u8c61\u7684\u63a5\u53e3\uff0c\u8ba9\u5b50\u7c7b\u51b3\u5b9a\u5b9e\u4f8b\u5316\u54ea\u4e2a\u7c7b\u3002<\/p>\n<pre><code class=\"python\">from abc import ABC, abstractmethod\n\nclass Animal(ABC):\n    @abstractmethod\n    def make_sound(self):\n        pass\n\nclass Dog(Animal):\n    def make_sound(self):\n        return &quot;\u6c6a\u6c6a&quot;\n\nclass Cat(Animal):\n    def make_sound(self):\n        return &quot;\u55b5\u55b5&quot;\n\nclass AnimalFactory:\n    @staticmethod\n    def create_animal(animal_type):\n        if animal_type == &quot;dog&quot;:\n            return Dog()\n        elif animal_type == &quot;cat&quot;:\n            return Cat()\n        else:\n            raise ValueError(&quot;\u672a\u77e5\u7684\u52a8\u7269\u7c7b\u578b&quot;)\n\ndef factory_method_demo():\n    print(&quot;\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    dog = AnimalFactory.create_animal(&quot;dog&quot;)\n    cat = AnimalFactory.create_animal(&quot;cat&quot;)\n    \n    print(f&quot;\u72d7\u53eb\u58f0: {dog.make_sound()}&quot;)\n    print(f&quot;\u732b\u53eb\u58f0: {cat.make_sound()}&quot;)\n\nfactory_method_demo()<\/code><\/pre>\n<h4>\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f<\/h4>\n<p>\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f\u63d0\u4f9b\u521b\u5efa\u76f8\u5173\u6216\u4f9d\u8d56\u5bf9\u8c61\u7684\u63a5\u53e3\uff0c\u65e0\u9700\u6307\u5b9a\u5177\u4f53\u7c7b\u3002<\/p>\n<pre><code class=\"python\">from abc import ABC, abstractmethod\n\nclass Button(ABC):\n    @abstractmethod\n    def render(self):\n        pass\n\nclass Checkbox(ABC):\n    @abstractmethod\n    def render(self):\n        pass\n\nclass WindowsButton(Button):\n    def render(self):\n        return &quot;Windows \u6309\u94ae&quot;\n\nclass WindowsCheckbox(Checkbox):\n    def render(self):\n        return &quot;Windows \u590d\u9009\u6846&quot;\n\nclass MacButton(Button):\n    def render(self):\n        return &quot;Mac \u6309\u94ae&quot;\n\nclass MacCheckbox(Checkbox):\n    def render(self):\n        return &quot;Mac \u590d\u9009\u6846&quot;\n\nclass GUIFactory(ABC):\n    @abstractmethod\n    def create_button(self):\n        pass\n    \n    @abstractmethod\n    def create_checkbox(self):\n        pass\n\nclass WindowsFactory(GUIFactory):\n    def create_button(self):\n        return WindowsButton()\n    \n    def create_checkbox(self):\n        return WindowsCheckbox()\n\nclass MacFactory(GUIFactory):\n    def create_button(self):\n        return MacButton()\n    \n    def create_checkbox(self):\n        return MacCheckbox()\n\ndef abstract_factory_demo():\n    print(&quot;\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    windows_factory = WindowsFactory()\n    mac_factory = MacFactory()\n    \n    print(f&quot;Windows: {windows_factory.create_button().render()}, {windows_factory.create_checkbox().render()}&quot;)\n    print(f&quot;Mac: {mac_factory.create_button().render()}, {mac_factory.create_checkbox().render()}&quot;)\n\nabstract_factory_demo()<\/code><\/pre>\n<h4>\u5efa\u9020\u8005\u6a21\u5f0f<\/h4>\n<p>\u5efa\u9020\u8005\u6a21\u5f0f\u5c06\u590d\u6742\u5bf9\u8c61\u7684\u6784\u5efa\u4e0e\u8868\u793a\u5206\u79bb\uff0c\u4f7f\u5f97\u540c\u6837\u7684\u6784\u5efa\u8fc7\u7a0b\u53ef\u4ee5\u521b\u5efa\u4e0d\u540c\u7684\u8868\u793a\u3002<\/p>\n<pre><code class=\"python\">class Computer:\n    def __init__(self):\n        self.cpu = None\n        self.memory = None\n        self.storage = None\n    \n    def __str__(self):\n        return f&quot;CPU: {self.cpu}, \u5185\u5b58: {self.memory}, \u5b58\u50a8: {self.storage}&quot;\n\nclass ComputerBuilder:\n    def __init__(self):\n        self.computer = Computer()\n    \n    def set_cpu(self, cpu):\n        self.computer.cpu = cpu\n        return self\n    \n    def set_memory(self, memory):\n        self.computer.memory = memory\n        return self\n    \n    def set_storage(self, storage):\n        self.computer.storage = storage\n        return self\n    \n    def build(self):\n        return self.computer\n\ndef builder_demo():\n    print(&quot;\u5efa\u9020\u8005\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    computer = (ComputerBuilder()\n                .set_cpu(&quot;Intel i7&quot;)\n                .set_memory(&quot;16GB&quot;)\n                .set_storage(&quot;512GB SSD&quot;)\n                .build())\n    \n    print(f&quot;\u914d\u7f6e\u7684\u7535\u8111: {computer}&quot;)\n\nbuilder_demo()<\/code><\/pre>\n<h4>\u539f\u578b\u6a21\u5f0f<\/h4>\n<p>\u539f\u578b\u6a21\u5f0f\u901a\u8fc7\u590d\u5236\u73b0\u6709\u5bf9\u8c61\u6765\u521b\u5efa\u65b0\u5bf9\u8c61\uff0c\u63d0\u9ad8\u521b\u5efa\u6548\u7387\u3002<\/p>\n<pre><code class=\"python\">import copy\n\nclass Prototype:\n    def __init__(self, value):\n        self.value = value\n    \n    def clone(self):\n        return copy.deepcopy(self)\n\ndef prototype_demo():\n    print(&quot;\u539f\u578b\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    original = Prototype(&quot;\u539f\u59cb\u5bf9\u8c61&quot;)\n    cloned = original.clone()\n    \n    print(f&quot;\u539f\u59cb\u5bf9\u8c61: {original.value}&quot;)\n    print(f&quot;\u514b\u9686\u5bf9\u8c61: {cloned.value}&quot;)\n    print(f&quot;\u662f\u5426\u76f8\u540c: {original is cloned}&quot;)\n\nprototype_demo()<\/code><\/pre>\n<h3>\u7ed3\u6784\u578b\u6a21\u5f0f<\/h3>\n<p>\u7ed3\u6784\u578b\u6a21\u5f0f\u5173\u6ce8\u7c7b\u548c\u5bf9\u8c61\u7684\u7ec4\u5408\uff0c\u5f62\u6210\u66f4\u5927\u7684\u7ed3\u6784\u3002<\/p>\n<h4>\u9002\u914d\u5668\u6a21\u5f0f<\/h4>\n<p>\u9002\u914d\u5668\u6a21\u5f0f\u5c06\u4e00\u4e2a\u7c7b\u7684\u63a5\u53e3\u8f6c\u6362\u6210\u5ba2\u6237\u5e0c\u671b\u7684\u53e6\u4e00\u4e2a\u63a5\u53e3\u3002<\/p>\n<pre><code class=\"python\">class Target:\n    def request(self):\n        return &quot;\u76ee\u6807\u63a5\u53e3&quot;\n\nclass Adaptee:\n    def specific_request(self):\n        return &quot;\u7279\u5b9a\u63a5\u53e3&quot;\n\nclass Adapter(Target):\n    def __init__(self, adaptee):\n        self.adaptee = adaptee\n    \n    def request(self):\n        return self.adaptee.specific_request()\n\ndef adapter_demo():\n    print(&quot;\u9002\u914d\u5668\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    adaptee = Adaptee()\n    adapter = Adapter(adaptee)\n    \n    print(f&quot;\u9002\u914d\u5668\u8bf7\u6c42: {adapter.request()}&quot;)\n\nadapter_demo()<\/code><\/pre>\n<h4>\u6865\u63a5\u6a21\u5f0f<\/h4>\n<p>\u6865\u63a5\u6a21\u5f0f\u5c06\u62bd\u8c61\u4e0e\u5b9e\u73b0\u5206\u79bb\uff0c\u4f7f\u5b83\u4eec\u53ef\u4ee5\u72ec\u7acb\u53d8\u5316\u3002<\/p>\n<pre><code class=\"python\">class DrawingAPI:\n    def draw_circle(self, x, y, radius):\n        pass\n\nclass DrawingAPI1(DrawingAPI):\n    def draw_circle(self, x, y, radius):\n        return f&quot;API1 \u7ed8\u5236\u5706\u5f62: ({x}, {y}), \u534a\u5f84: {radius}&quot;\n\nclass DrawingAPI2(DrawingAPI):\n    def draw_circle(self, x, y, radius):\n        return f&quot;API2 \u7ed8\u5236\u5706\u5f62: ({x}, {y}), \u534a\u5f84: {radius}&quot;\n\nclass Shape:\n    def __init__(self, drawing_api):\n        self.drawing_api = drawing_api\n    \n    def draw(self):\n        pass\n\nclass Circle(Shape):\n    def __init__(self, x, y, radius, drawing_api):\n        super().__init__(drawing_api)\n        self.x = x\n        self.y = y\n        self.radius = radius\n    \n    def draw(self):\n        return self.drawing_api.draw_circle(self.x, self.y, self.radius)\n\ndef bridge_demo():\n    print(&quot;\u6865\u63a5\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    circle1 = Circle(1, 2, 3, DrawingAPI1())\n    circle2 = Circle(4, 5, 6, DrawingAPI2())\n    \n    print(circle1.draw())\n    print(circle2.draw())\n\nbridge_demo()<\/code><\/pre>\n<h4>\u7ec4\u5408\u6a21\u5f0f<\/h4>\n<p>\u7ec4\u5408\u6a21\u5f0f\u5c06\u5bf9\u8c61\u7ec4\u5408\u6210\u6811\u5f62\u7ed3\u6784\u4ee5\u8868\u793a&#8221;\u90e8\u5206-\u6574\u4f53&#8221;\u7684\u5c42\u6b21\u7ed3\u6784\u3002<\/p>\n<pre><code class=\"python\">class Component:\n    def operation(self):\n        pass\n    \n    def add(self, component):\n        pass\n    \n    def remove(self, component):\n        pass\n\nclass Leaf(Component):\n    def operation(self):\n        return &quot;\u53f6\u5b50\u8282\u70b9&quot;\n\nclass Composite(Component):\n    def __init__(self):\n        self.children = []\n    \n    def add(self, component):\n        self.children.append(component)\n    \n    def remove(self, component):\n        self.children.remove(component)\n    \n    def operation(self):\n        results = [child.operation() for child in self.children]\n        return f&quot;\u7ec4\u5408\u8282\u70b9: {', '.join(results)}&quot;\n\ndef composite_demo():\n    print(&quot;\u7ec4\u5408\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    leaf1 = Leaf()\n    leaf2 = Leaf()\n    composite = Composite()\n    \n    composite.add(leaf1)\n    composite.add(leaf2)\n    \n    print(composite.operation())\n\ncomposite_demo()<\/code><\/pre>\n<h4>\u88c5\u9970\u5668\u6a21\u5f0f<\/h4>\n<p>\u88c5\u9970\u5668\u6a21\u5f0f\u52a8\u6001\u5730\u7ed9\u5bf9\u8c61\u6dfb\u52a0\u989d\u5916\u7684\u804c\u8d23\u3002<\/p>\n<pre><code class=\"python\">class Component:\n    def operation(self):\n        return &quot;\u57fa\u672c\u64cd\u4f5c&quot;\n\nclass Decorator(Component):\n    def __init__(self, component):\n        self.component = component\n    \n    def operation(self):\n        return self.component.operation()\n\nclass ConcreteDecorator(Decorator):\n    def operation(self):\n        return f&quot;\u88c5\u9970 {super().operation()}&quot;\n\ndef decorator_demo():\n    print(&quot;\u88c5\u9970\u5668\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    component = Component()\n    decorated = ConcreteDecorator(component)\n    \n    print(decorated.operation())\n\ndecorator_demo()<\/code><\/pre>\n<h4>\u5916\u89c2\u6a21\u5f0f<\/h4>\n<p>\u5916\u89c2\u6a21\u5f0f\u4e3a\u5b50\u7cfb\u7edf\u4e2d\u7684\u4e00\u7ec4\u63a5\u53e3\u63d0\u4f9b\u4e00\u4e2a\u4e00\u81f4\u7684\u754c\u9762\u3002<\/p>\n<pre><code class=\"python\">class SubsystemA:\n    def operation_a(self):\n        return &quot;\u5b50\u7cfb\u7edf A \u64cd\u4f5c&quot;\n\nclass SubsystemB:\n    def operation_b(self):\n        return &quot;\u5b50\u7cfb\u7edf B \u64cd\u4f5c&quot;\n\nclass Facade:\n    def __init__(self):\n        self.subsystem_a = SubsystemA()\n        self.subsystem_b = SubsystemB()\n    \n    def operation(self):\n        return f&quot;{self.subsystem_a.operation_a()}, {self.subsystem_b.operation_b()}&quot;\n\ndef facade_demo():\n    print(&quot;\u5916\u89c2\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    facade = Facade()\n    print(facade.operation())\n\nfacade_demo()<\/code><\/pre>\n<h4>\u4eab\u5143\u6a21\u5f0f<\/h4>\n<p>\u4eab\u5143\u6a21\u5f0f\u8fd0\u7528\u5171\u4eab\u6280\u672f\u6709\u6548\u5730\u652f\u6301\u5927\u91cf\u7ec6\u7c92\u5ea6\u7684\u5bf9\u8c61\u3002<\/p>\n<pre><code class=\"python\">class Flyweight:\n    def __init__(self, intrinsic_state):\n        self.intrinsic_state = intrinsic_state\n    \n    def operation(self, extrinsic_state):\n        return f&quot;\u5185\u8574\u72b6\u6001: {self.intrinsic_state}, \u5916\u8574\u72b6\u6001: {extrinsic_state}&quot;\n\nclass FlyweightFactory:\n    def __init__(self):\n        self.flyweights = {}\n    \n    def get_flyweight(self, key):\n        if key not in self.flyweights:\n            self.flyweights[key] = Flyweight(key)\n        return self.flyweights[key]\n\ndef flyweight_demo():\n    print(&quot;\u4eab\u5143\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    factory = FlyweightFactory()\n    \n    flyweight1 = factory.get_flyweight(&quot;\u5171\u4eab\u5bf9\u8c61&quot;)\n    flyweight2 = factory.get_flyweight(&quot;\u5171\u4eab\u5bf9\u8c61&quot;)\n    \n    print(f&quot;\u662f\u5426\u76f8\u540c: {flyweight1 is flyweight2}&quot;)\n    print(flyweight1.operation(&quot;\u5916\u8574\u72b6\u6001 1&quot;))\n    print(flyweight2.operation(&quot;\u5916\u8574\u72b6\u6001 2&quot;))\n\nflyweight_demo()<\/code><\/pre>\n<h4>\u4ee3\u7406\u6a21\u5f0f<\/h4>\n<p>\u4ee3\u7406\u6a21\u5f0f\u4e3a\u5176\u4ed6\u5bf9\u8c61\u63d0\u4f9b\u4e00\u79cd\u4ee3\u7406\u4ee5\u63a7\u5236\u5bf9\u8fd9\u4e2a\u5bf9\u8c61\u7684\u8bbf\u95ee\u3002<\/p>\n<pre><code class=\"python\">class Subject:\n    def request(self):\n        pass\n\nclass RealSubject(Subject):\n    def request(self):\n        return &quot;\u771f\u5b9e\u8bf7\u6c42&quot;\n\nclass Proxy(Subject):\n    def __init__(self):\n        self.real_subject = None\n    \n    def request(self):\n        if self.real_subject is None:\n            self.real_subject = RealSubject()\n        return self.real_subject.request()\n\ndef proxy_demo():\n    print(&quot;\u4ee3\u7406\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    proxy = Proxy()\n    print(proxy.request())\n\nproxy_demo()<\/code><\/pre>\n<h3>\u884c\u4e3a\u578b\u6a21\u5f0f<\/h3>\n<p>\u884c\u4e3a\u578b\u6a21\u5f0f\u5173\u6ce8\u5bf9\u8c61\u4e4b\u95f4\u7684\u901a\u4fe1\u548c\u804c\u8d23\u5206\u914d\u3002<\/p>\n<h4>\u8d23\u4efb\u94fe\u6a21\u5f0f<\/h4>\n<p>\u8d23\u4efb\u94fe\u6a21\u5f0f\u4f7f\u591a\u4e2a\u5bf9\u8c61\u90fd\u6709\u673a\u4f1a\u5904\u7406\u8bf7\u6c42\uff0c\u4ece\u800c\u907f\u514d\u8bf7\u6c42\u7684\u53d1\u9001\u8005\u548c\u63a5\u6536\u8005\u4e4b\u95f4\u7684\u8026\u5408\u5173\u7cfb\u3002<\/p>\n<pre><code class=\"python\">class Handler:\n    def __init__(self):\n        self.next_handler = None\n    \n    def set_next(self, handler):\n        self.next_handler = handler\n        return handler\n    \n    def handle(self, request):\n        if self.next_handler:\n            return self.next_handler.handle(request)\n        return None\n\nclass ConcreteHandler1(Handler):\n    def handle(self, request):\n        if request == &quot;\u8bf7\u6c421&quot;:\n            return &quot;\u5904\u7406\u8bf7\u6c421&quot;\n        return super().handle(request)\n\nclass ConcreteHandler2(Handler):\n    def handle(self, request):\n        if request == &quot;\u8bf7\u6c422&quot;:\n            return &quot;\u5904\u7406\u8bf7\u6c422&quot;\n        return super().handle(request)\n\ndef chain_of_responsibility_demo():\n    print(&quot;\u8d23\u4efb\u94fe\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    handler1 = ConcreteHandler1()\n    handler2 = ConcreteHandler2()\n    handler1.set_next(handler2)\n    \n    print(handler1.handle(&quot;\u8bf7\u6c421&quot;))\n    print(handler1.handle(&quot;\u8bf7\u6c422&quot;))\n\nchain_of_responsibility_demo()<\/code><\/pre>\n<h4>\u547d\u4ee4\u6a21\u5f0f<\/h4>\n<p>\u547d\u4ee4\u6a21\u5f0f\u5c06\u8bf7\u6c42\u5c01\u88c5\u4e3a\u5bf9\u8c61\uff0c\u4ece\u800c\u53ef\u7528\u4e0d\u540c\u7684\u8bf7\u6c42\u5bf9\u5ba2\u6237\u8fdb\u884c\u53c2\u6570\u5316\u3002<\/p>\n<pre><code class=\"python\">class Command:\n    def execute(self):\n        pass\n\nclass Receiver:\n    def action(self):\n        return &quot;\u6267\u884c\u64cd\u4f5c&quot;\n\nclass ConcreteCommand(Command):\n    def __init__(self, receiver):\n        self.receiver = receiver\n    \n    def execute(self):\n        return self.receiver.action()\n\nclass Invoker:\n    def __init__(self):\n        self.command = None\n    \n    def set_command(self, command):\n        self.command = command\n    \n    def execute_command(self):\n        return self.command.execute()\n\ndef command_demo():\n    print(&quot;\u547d\u4ee4\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    receiver = Receiver()\n    command = ConcreteCommand(receiver)\n    invoker = Invoker()\n    \n    invoker.set_command(command)\n    print(invoker.execute_command())\n\ncommand_demo()<\/code><\/pre>\n<h4>\u8fed\u4ee3\u5668\u6a21\u5f0f<\/h4>\n<p>\u8fed\u4ee3\u5668\u6a21\u5f0f\u63d0\u4f9b\u4e00\u79cd\u65b9\u6cd5\u987a\u5e8f\u8bbf\u95ee\u4e00\u4e2a\u805a\u5408\u5bf9\u8c61\u4e2d\u5404\u4e2a\u5143\u7d20\uff0c\u800c\u53c8\u4e0d\u9700\u66b4\u9732\u8be5\u5bf9\u8c61\u7684\u5185\u90e8\u8868\u793a\u3002<\/p>\n<pre><code class=\"python\">class Iterator:\n    def has_next(self):\n        pass\n    \n    def next(self):\n        pass\n\nclass ConcreteIterator(Iterator):\n    def __init__(self, collection):\n        self.collection = collection\n        self.index = 0\n    \n    def has_next(self):\n        return self.index &lt; len(self.collection)\n    \n    def next(self):\n        if self.has_next():\n            item = self.collection[self.index]\n            self.index += 1\n            return item\n        return None\n\ndef iterator_demo():\n    print(&quot;\u8fed\u4ee3\u5668\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    collection = [1, 2, 3, 4, 5]\n    iterator = ConcreteIterator(collection)\n    \n    while iterator.has_next():\n        print(iterator.next())\n\niterator_demo()<\/code><\/pre>\n<h4>\u4e2d\u4ecb\u8005\u6a21\u5f0f<\/h4>\n<p>\u4e2d\u4ecb\u8005\u6a21\u5f0f\u7528\u4e00\u4e2a\u4e2d\u4ecb\u5bf9\u8c61\u6765\u5c01\u88c5\u4e00\u7cfb\u5217\u7684\u5bf9\u8c61\u4ea4\u4e92\u3002<\/p>\n<pre><code class=\"python\">class Mediator:\n    def send(self, message, colleague):\n        pass\n\nclass Colleague:\n    def __init__(self, mediator):\n        self.mediator = mediator\n    \n    def send(self, message):\n        self.mediator.send(message, self)\n    \n    def receive(self, message):\n        pass\n\nclass ConcreteColleague1(Colleague):\n    def receive(self, message):\n        return f&quot;\u540c\u4e8b1\u6536\u5230: {message}&quot;\n\nclass ConcreteColleague2(Colleague):\n    def receive(self, message):\n        return f&quot;\u540c\u4e8b2\u6536\u5230: {message}&quot;\n\nclass ConcreteMediator(Mediator):\n    def __init__(self):\n        self.colleague1 = None\n        self.colleague2 = None\n    \n    def send(self, message, colleague):\n        if colleague == self.colleague1:\n            return self.colleague2.receive(message)\n        else:\n            return self.colleague1.receive(message)\n\ndef mediator_demo():\n    print(&quot;\u4e2d\u4ecb\u8005\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    mediator = ConcreteMediator()\n    colleague1 = ConcreteColleague1(mediator)\n    colleague2 = ConcreteColleague2(mediator)\n    \n    mediator.colleague1 = colleague1\n    mediator.colleague2 = colleague2\n    \n    print(colleague1.send(&quot;\u4f60\u597d&quot;))\n    print(colleague2.send(&quot;\u518d\u89c1&quot;))\n\nmediator_demo()<\/code><\/pre>\n<h4>\u5907\u5fd8\u5f55\u6a21\u5f0f<\/h4>\n<p>\u5907\u5fd8\u5f55\u6a21\u5f0f\u5728\u4e0d\u7834\u574f\u5c01\u88c5\u6027\u7684\u524d\u63d0\u4e0b\uff0c\u6355\u83b7\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u72b6\u6001\u3002<\/p>\n<pre><code class=\"python\">class Memento:\n    def __init__(self, state):\n        self.state = state\n\nclass Originator:\n    def __init__(self):\n        self.state = None\n    \n    def set_state(self, state):\n        self.state = state\n    \n    def save_state(self):\n        return Memento(self.state)\n    \n    def restore_state(self, memento):\n        self.state = memento.state\n\nclass Caretaker:\n    def __init__(self):\n        self.mementos = []\n    \n    def add_memento(self, memento):\n        self.mementos.append(memento)\n    \n    def get_memento(self, index):\n        return self.mementos[index]\n\ndef memento_demo():\n    print(&quot;\u5907\u5fd8\u5f55\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    originator = Originator()\n    caretaker = Caretaker()\n    \n    originator.set_state(&quot;\u72b6\u60011&quot;)\n    caretaker.add_memento(originator.save_state())\n    \n    originator.set_state(&quot;\u72b6\u60012&quot;)\n    caretaker.add_memento(originator.save_state())\n    \n    originator.restore_state(caretaker.get_memento(0))\n    print(f&quot;\u6062\u590d\u72b6\u6001: {originator.state}&quot;)\n\nmemento_demo()<\/code><\/pre>\n<h4>\u89c2\u5bdf\u8005\u6a21\u5f0f<\/h4>\n<p>\u89c2\u5bdf\u8005\u6a21\u5f0f\u5b9a\u4e49\u5bf9\u8c61\u95f4\u7684\u4e00\u79cd\u4e00\u5bf9\u591a\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u5f53\u4e00\u4e2a\u5bf9\u8c61\u7684\u72b6\u6001\u53d1\u751f\u6539\u53d8\u65f6\uff0c\u6240\u6709\u4f9d\u8d56\u4e8e\u5b83\u7684\u5bf9\u8c61\u90fd\u5f97\u5230\u901a\u77e5\u3002<\/p>\n<pre><code class=\"python\">class Observer:\n    def update(self, message):\n        pass\n\nclass Subject:\n    def __init__(self):\n        self.observers = []\n    \n    def attach(self, observer):\n        self.observers.append(observer)\n    \n    def detach(self, observer):\n        self.observers.remove(observer)\n    \n    def notify(self, message):\n        for observer in self.observers:\n            observer.update(message)\n\nclass ConcreteObserver(Observer):\n    def __init__(self, name):\n        self.name = name\n    \n    def update(self, message):\n        return f&quot;{self.name} \u6536\u5230: {message}&quot;\n\ndef observer_demo():\n    print(&quot;\u89c2\u5bdf\u8005\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    subject = Subject()\n    observer1 = ConcreteObserver(&quot;\u89c2\u5bdf\u80051&quot;)\n    observer2 = ConcreteObserver(&quot;\u89c2\u5bdf\u80052&quot;)\n    \n    subject.attach(observer1)\n    subject.attach(observer2)\n    \n    print(subject.notify(&quot;\u65b0\u6d88\u606f&quot;))\n\nobserver_demo()<\/code><\/pre>\n<h4>\u72b6\u6001\u6a21\u5f0f<\/h4>\n<p>\u72b6\u6001\u6a21\u5f0f\u5141\u8bb8\u4e00\u4e2a\u5bf9\u8c61\u5728\u5176\u5185\u90e8\u72b6\u6001\u6539\u53d8\u65f6\u6539\u53d8\u5b83\u7684\u884c\u4e3a\u3002<\/p>\n<pre><code class=\"python\">class State:\n    def handle(self):\n        pass\n\nclass ConcreteStateA(State):\n    def handle(self):\n        return &quot;\u72b6\u6001 A&quot;\n\nclass ConcreteStateB(State):\n    def handle(self):\n        return &quot;\u72b6\u6001 B&quot;\n\nclass Context:\n    def __init__(self):\n        self.state = None\n    \n    def set_state(self, state):\n        self.state = state\n    \n    def request(self):\n        return self.state.handle()\n\ndef state_demo():\n    print(&quot;\u72b6\u6001\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    context = Context()\n    state_a = ConcreteStateA()\n    state_b = ConcreteStateB()\n    \n    context.set_state(state_a)\n    print(context.request())\n    \n    context.set_state(state_b)\n    print(context.request())\n\nstate_demo()<\/code><\/pre>\n<h4>\u7b56\u7565\u6a21\u5f0f<\/h4>\n<p>\u7b56\u7565\u6a21\u5f0f\u5b9a\u4e49\u4e00\u7cfb\u5217\u7b97\u6cd5\uff0c\u628a\u5b83\u4eec\u4e00\u4e2a\u4e2a\u5c01\u88c5\u8d77\u6765\uff0c\u5e76\u4e14\u4f7f\u5b83\u4eec\u53ef\u76f8\u4e92\u66ff\u6362\u3002<\/p>\n<pre><code class=\"python\">class Strategy:\n    def execute(self):\n        pass\n\nclass ConcreteStrategyA(Strategy):\n    def execute(self):\n        return &quot;\u7b56\u7565 A&quot;\n\nclass ConcreteStrategyB(Strategy):\n    def execute(self):\n        return &quot;\u7b56\u7565 B&quot;\n\nclass Context:\n    def __init__(self, strategy):\n        self.strategy = strategy\n    \n    def set_strategy(self, strategy):\n        self.strategy = strategy\n    \n    def execute_strategy(self):\n        return self.strategy.execute()\n\ndef strategy_demo():\n    print(&quot;\u7b56\u7565\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    context = Context(ConcreteStrategyA())\n    print(context.execute_strategy())\n    \n    context.set_strategy(ConcreteStrategyB())\n    print(context.execute_strategy())\n\nstrategy_demo()<\/code><\/pre>\n<h4>\u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f<\/h4>\n<p>\u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f\u5b9a\u4e49\u4e00\u4e2a\u64cd\u4f5c\u4e2d\u7684\u7b97\u6cd5\u7684\u9aa8\u67b6\uff0c\u800c\u5c06\u4e00\u4e9b\u6b65\u9aa4\u5ef6\u8fdf\u5230\u5b50\u7c7b\u4e2d\u3002<\/p>\n<pre><code class=\"python\">from abc import ABC, abstractmethod\n\nclass AbstractClass(ABC):\n    def template_method(self):\n        self.primitive_operation1()\n        self.primitive_operation2()\n    \n    @abstractmethod\n    def primitive_operation1(self):\n        pass\n    \n    @abstractmethod\n    def primitive_operation2(self):\n        pass\n\nclass ConcreteClass(AbstractClass):\n    def primitive_operation1(self):\n        return &quot;\u64cd\u4f5c1&quot;\n    \n    def primitive_operation2(self):\n        return &quot;\u64cd\u4f5c2&quot;\n\ndef template_method_demo():\n    print(&quot;\u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    concrete = ConcreteClass()\n    concrete.template_method()\n\ntemplate_method_demo()<\/code><\/pre>\n<h4>\u8bbf\u95ee\u8005\u6a21\u5f0f<\/h4>\n<p>\u8bbf\u95ee\u8005\u6a21\u5f0f\u8868\u793a\u4e00\u4e2a\u4f5c\u7528\u4e8e\u67d0\u5bf9\u8c61\u7ed3\u6784\u4e2d\u7684\u5404\u5143\u7d20\u7684\u64cd\u4f5c\u3002<\/p>\n<pre><code class=\"python\">class Visitor:\n    def visit_element_a(self, element):\n        pass\n    \n    def visit_element_b(self, element):\n        pass\n\nclass ConcreteVisitor(Visitor):\n    def visit_element_a(self, element):\n        return f&quot;\u8bbf\u95ee\u5143\u7d20 A: {element.operation_a()}&quot;\n    \n    def visit_element_b(self, element):\n        return f&quot;\u8bbf\u95ee\u5143\u7d20 B: {element.operation_b()}&quot;\n\nclass Element:\n    def accept(self, visitor):\n        pass\n\nclass ElementA(Element):\n    def operation_a(self):\n        return &quot;\u5143\u7d20 A \u64cd\u4f5c&quot;\n    \n    def accept(self, visitor):\n        return visitor.visit_element_a(self)\n\nclass ElementB(Element):\n    def operation_b(self):\n        return &quot;\u5143\u7d20 B \u64cd\u4f5c&quot;\n    \n    def accept(self, visitor):\n        return visitor.visit_element_b(self)\n\ndef visitor_demo():\n    print(&quot;\u8bbf\u95ee\u8005\u6a21\u5f0f\u6f14\u793a:&quot;)\n    \n    visitor = ConcreteVisitor()\n    element_a = ElementA()\n    element_b = ElementB()\n    \n    print(element_a.accept(visitor))\n    print(element_b.accept(visitor))\n\nvisitor_demo()<\/code><\/pre>\n<h3>\u603b\u7ed3<\/h3>\n<p>23 \u79cd\u8bbe\u8ba1\u6a21\u5f0f\u5728 Python \u4e2d\u7684\u5b9e\u73b0\u4f53\u73b0\u4e86\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u7684\u7cbe\u9ad3\u3002\u901a\u8fc7\u5b9e\u9645\u573a\u666f\u7684\u843d\u5730\u5e94\u7528\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u597d\u5730\u7406\u89e3\u6bcf\u79cd\u6a21\u5f0f\u7684\u9002\u7528\u573a\u666f\u548c\u5b9e\u73b0\u65b9\u5f0f\u3002<\/p>\n<p>\u638c\u63e1\u8bbe\u8ba1\u6a21\u5f0f\u4e0d\u4ec5\u80fd\u591f\u63d0\u9ad8\u4ee3\u7801\u7684\u53ef\u7ef4\u62a4\u6027\u548c\u53ef\u6269\u5c55\u6027\uff0c\u8fd8\u80fd\u5e2e\u52a9\u5f00\u53d1\u8005\u66f4\u597d\u5730\u7406\u89e3\u548c\u5e94\u7528\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1\u539f\u5219\u3002\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\uff0c\u5408\u7406\u4f7f\u7528\u8bbe\u8ba1\u6a21\u5f0f\u53ef\u4ee5\u5927\u5927\u63d0\u9ad8\u4ee3\u7801\u8d28\u91cf\u548c\u5f00\u53d1\u6548\u7387\u3002<\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047614281\">https:\/\/segmentfault.com\/a\/1190000047614281<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python \u8bbe\u8ba1\u6a21\u5f0f\u5b9e\u6218\uff1a23 \u79cd\u6a21\u5f0f\u573a\u666f\u5316\u843d\u5730 \u8bbe\u8ba1\u6a21\u5f0f\u662f\u8f6f\u4ef6\u5de5\u7a0b\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\uff0cPython \u4f5c\u4e3a\u4e00\u95e8\u7075\u6d3b [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10021258","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10021258"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021258\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10021258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10021258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10021258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}