设计模式之模版方法模式

模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中具体实现细节,模版方法使得子类可以

不改变一个算法的结构即可重定义该算法的某些特定步骤。

1.模版方法将若干个方法集成到一个方法中,以便形成一个解决问题的算法骨架。模版方法在接口或抽象类中定义,

其调用的方法在接口或抽象类也有定义,在子类中进行重写。

2.可以通过定义模版方法给出成熟的算法步骤,同时又不限制步骤的细节,具体模版实现算法细节不会改变整个

算法的骨架。


实现一,使用接口:

public interface editModule{
public void step1();
public void step2();
public void step3();
public default void editStep(){//jdk8以后的新特性,使用default关键字修饰的方法可以有方法体
step1();
step2();
step3();
}
}
public class module1 implements editModule{
public void step1(){
System.out.println("模块1 执行步骤一");
}
public void step2(){
System.out.println("模块1 执行步骤二");
}
public void step3(){
System.out.println("模块1 执行步骤三");
}
}
public class module2 implements editModule{
public void step1(){
System.out.println("模块2 执行步骤一");
}
public void step2(){
System.out.println("模块2 执行步骤二");
}
public void step3(){
System.out.println("模块2 执行步骤三");
}
}
public class runApp{
public static void main(String args[]){
editModule eM=new module1();
eM.editStep();
eM=new module2();
eM.editStep();
}
}

输出:


模块1 执行步骤一
模块1 执行步骤二
模块1 执行步骤三
模块2 执行步骤一
模块2 执行步骤二
模块2 执行步骤三

实现二,使用抽象类:

public abstract class editModule{
public abstract void step1();
public abstract void step2();
public abstract void step3();
public void editStep(){//可用final修饰
step1();
step2();
step3();
}
}
public class module1 extends editModule{
public void step1(){
System.out.println("模块1 执行步骤一");
}
public void step2(){
System.out.println("模块1 执行步骤二");
}
public void step3(){
System.out.println("模块1 执行步骤三");
}
}
public class module2 extends editModule{
public void step1(){
System.out.println("模块2 执行步骤一");
}
public void step2(){
System.out.println("模块2 执行步骤二");
}
public void step3(){
System.out.println("模块2 执行步骤三");
}
}
public class runApp{
public static void main(String args[]){
editModule eM=new module1();
eM.editStep();
eM=new module2();
eM.editStep();
}
}

输出:

模块1 执行步骤一
模块1 执行步骤二
模块1 执行步骤三
模块2 执行步骤一
模块2 执行步骤二
模块2 执行步骤三


参考自 《java面向对象程序设计——实验指导与习题解答(张跃平等 著)》








发布了35 篇原创文章 · 获赞 13 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章