在模板模式(Template Pattern)中,一个抽象类或接口公开定义了执行它的方法的方式/模板。它的子类或实现类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式,通常规定了某种既定的流程。
package 模板模式; /** * 抽象类的方式实现模板模式 */ public abstract class USBDevice1 { public abstract void insert(); public abstract void work(); public abstract void pullOut(); public void start(){ insert(); work(); pullOut(); } } class A extends USBDevice1{ public A() { } @Override public void insert() { System.out.println("第一步:设备插入"); } @Override public void work() { System.out.println("第二步:设备工作"); } @Override public void pullOut() { System.out.println("第三步:设备拔出"); } } -------------------------------------- package 模板模式; /** * 测试类 * @author Administrator * */ public class Test1 { public static void main(String[] args) { A a=new A(); a.start(); } }
上面是通过抽象类的方式完成的模板模式。执行测试类,控制台打印如下:
第一步:设备插入 第二步:设备工作 第三步:设备拔出
我们还可以使用接口来完成模板模式,可以达到与上述代码同样的效果。
package 模板模式; /** * 接口方式实现模板模式 */ public interface USBDevice2 { public abstract void insert(); public abstract void work(); public abstract void pullOut(); public default void start(USBDevice2 usb){ usb.insert(); usb.work(); usb.pullOut(); } } class B implements USBDevice2{ @Override public void insert() { System.out.println("第一步:设备插入"); } @Override public void work() { System.out.println("第二步:设备工作"); } @Override public void pullOut() { System.out.println("第三步:设备工作"); } } ----------------------------------------------------------------- package 模板模式; /** * 测试类 */ public class Test2 { public static void main(String[] args) { USBDevice2 usb=new B(); usb.start(usb); } }