<?php abstract class Abstract_class { abstract public function primitive_operation1(); abstract public function primitive_operation2(); public function template_method() { echo "this is the template_method<br/>"; $this->primitive_operation1(); $this->primitive_operation2(); } } class Concrete_class_A extends Abstract_class { public function primitive_operation1() { echo "具体类A方法1实现<br/>"; } public function primitive_operation2() { echo "具体类A方法2实现<br/>"; } } class Concrete_class_B extends Abstract_class { public function primitive_operation1() { echo "具体类B方法1实现<br/>"; } public function primitive_operation2() { echo "具体类B方法2实现<br/>"; } } $c = new Concrete_class_A(); $c->template_method(); $c = new Concrete_class_B(); $c->template_method();
模板方法模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方(超类),这样就帮助子类摆脱重复的不变行为的纠缠。
时间: 2024-10-14 01:13:14