模板模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
from abc import ABCMeta, abstractmethod
class TestPaper(metaclass=ABCMeta):
def favorite_food(self):
print("The favorite food answer is ", self.favorite_food_answer())
def favorite_beverage(self):
print("The favorite food answer is ", self.favorite_beverage_answer())
def favorite_animal(self):
print("The favorite food answer is ", self.favorite_animal_answer())
@abstractmethod
def favorite_food_answer(self) -> str:
pass
@abstractmethod
def favorite_beverage_answer(self) -> str:
pass
@abstractmethod
def favorite_animal_answer(self) -> str:
pass
class TestPaperA(TestPaper):
def favorite_food_answer(self) -> str:
return "b"
def favorite_beverage_answer(self) -> str:
return "a"
def favorite_animal_answer(self) -> str:
return "c"
class TestPaperB(TestPaper):
def favorite_food_answer(self) -> str:
return "a"
def favorite_beverage_answer(self) -> str:
return "b"
def favorite_animal_answer(self) -> str:
return "c"
if __name__ == "__main__":
test_a = TestPaperA()
test_a.favorite_food()
test_a.favorite_animal()
test_a.favorite_beverage()
test_b = TestPaperB()
test_b.favorite_food()
test_b.favorite_animal()
test_b.favorite_beverage()
另外顺带介绍 一个迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。