阅读(276) 书签 (0)

AIGC提示词:编写模板方法模式文档

2023-06-29 14:55 更新

使用场景: 设计模式实现

中文提示词

模板方法模式:我需要一个能够定义算法框架的模板方法模式,希望文档能够详细、清晰地描述该模式的实现方式,并提供一些实用的代码示例和注意事项。

示例对话

ChatGPT3.5 设计模式实现

用户

模板方法模式:我需要一个能够定义算法框架的模板方法模式,希望文档能够详细、清晰地描述该模式的实现方式,并提供一些实用的代码示例和注意事项。

AI模型(ChatGPT3.5)

### 模板方法模式


模板方法模式是一种行为型设计模式,它允许定义一个算法的框架,而将一些步骤的具体实现交给子类来完成。这种模式可以使得子类在不改变算法结构的情况下,重新定义某些步骤的具体实现。


#### 实现方式


模板方法模式的实现方式如下:


1. 创建一个抽象类,其中包含一个模板方法,该方法定义了算法框架,但是具体实现由子类完成。该类还可以包含一些共同的实现步骤,这些步骤也可以由子类重写。
2. 创建一个或多个具体子类,实现抽象类中定义的模板方法,并重写其中的一些具体实现步骤。


#### 代码示例


```python
from abc import ABC, abstractmethod




class AbstractClass(ABC):
    def template_method(self) -> None:
        self.base_operation1()
        self.required_operation1()
        self.base_operation2()
        self.hook1()
        self.required_operation2()
        self.base_operation3()
        self.hook2()


    def base_operation1(self) -> None:
        print('AbstractClass says: I am doing the bulk of the work. This is base_operation1.')


    def base_operation2(self) -> None:
        print('AbstractClass says: But I let subclasses override some operations. This is base_operation2.')


    def base_operation3(self) -> None:
        print('AbstractClass says: But I am doing the bulk of the work anyway. This is base_operation3.')


    @abstractmethod
    def required_operation1(self) -> None:
        pass


    @abstractmethod
    def required_operation2(self) -> None:
        pass


    def hook1(self) -> None:
        pass


    def hook2(self) -> None:
        pass




class ConcreteClass1(AbstractClass):
    def required_operation1(self) -> None:
        print('ConcreteClass1 says: Implemented required_operation1.')


    def required_operation2(self) -> None:
        print('ConcreteClass1 says: Implemented required_operation2.')




class ConcreteClass2(AbstractClass):
    def required_operation1(self) -> None:
        print('ConcreteClass2 says: Implemented required_operation1.')


    def required_operation2(self) -> None:
        print('ConcreteClass2 says: Implemented required_operation2.')


    def hook1(self) -> None:
        print('ConcreteClass2 says: Overridden hook1.')




def client_code(abstract_class: AbstractClass) -> None:
    abstract_class.template_method()




if __name__ == '__main__':
    print('Client: Testing ConcreteClass1...')
    client_code(ConcreteClass1())


    print('\nClient: Testing ConcreteClass2...')
    client_code(ConcreteClass2())

注意事项

  • 模板方法模式的优点在于它允许在不改变算法框架的前提下,实现算法中的某些步骤的具体实现。
  • 模板方法模式的缺点在于它可能会带来代码的复杂性,因为需要定义抽象类和具体子类,并在其中实现一些共同的和不同的操作步骤。
  • 如果算法框架需要改变,需要修改抽象类的模板方法,这可能会影响所有具体子类的实现。