Template Method
模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义该算法某些特定步骤。
特点:
模板方法模式是通过把不变的行为放到超类中,去除子类中重复的代码来体现它的优势。提供了一个很好的复用平台。
当不变和可变的行为方法的子类实现中混合在一起的时候,不变的行为会在子类中重复实现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
当我们要完成某一细节层次一致的一个过程或者一个系列的步骤,但其个别步骤在更详细的层次上的实现可能不同的时候,通常考虑模板方法模式来处理。
1 public abstract class AbstractClass { 2 3 protected String question1 = "Java 属于OOP?"; 4 5 protected String question2 = "C 属于OOP?"; 6 7 //一些抽象行为,放到子类去实现。 8 public abstract String getAnswer1(); 9 10 public abstract String getAnswer2(); 11 12 //模板方法,给出了逻辑骨架,而逻辑组成的一些相应的抽象操作,它们都推迟到子类实现。 13 public void printf(){ 14 System.out.println("Question : " + question1); 15 System.out.println("Answer : " + getAnswer1()); 16 System.out.println("Question : " + question2); 17 System.out.println("Answer : " + getAnswer2()); 18 } 19 20 }
1 public class ConcreteClassA extends AbstractClass{ 2 3 @Override 4 public String getAnswer1() { 5 return "Y"; 6 } 7 8 @Override 9 public String getAnswer2() { 10 return "N"; 11 } 12 13 }
1 public class ConcreteClassB extends AbstractClass{ 2 3 @Override 4 public String getAnswer1() { 5 return "N"; 6 } 7 8 protected int sss; 9 10 @Override 11 public String getAnswer2() { 12 return "N"; 13 } 14 15 }
1 public static void main(String[] args) { 2 3 AbstractClass c1 = new ConcreteClassA(); 4 5 AbstractClass c2 = new ConcreteClassB(); 6 7 c1.printf(); 8 9 c2.printf(); 10 11 }
打印结果:
Question : Java 属于OOP?
Answer : Y
Question : C 属于OOP?
Answer : N
Question : Java 属于OOP?
Answer : N
Question : C 属于OOP?
Answer : N