一、先使用接口实现模板设计模式
1、先写模板模式中大家公共的方法,将该方法放到一个接口里:
public interface MyPublic {
public void step02();
}
2、写模板类(step01和step03是公共的不变的方法,step02是公共各自需要实现改变的方法,也就需要传入一个实现类对象)
public class MyTemplate {
public void step01() {
System.out.println("step01().......");
}
public void step02(MyPublic myPublic) {
myPublic.step02();
}
public void step03() {
System.out.println("step03().......");
}
public void step(MyPublic myPublic) {
this.step01();
this.step02(myPublic);
this.step03();
}
}
3、实现公共的各自实现的方法的接口(哈哈,绕口不,就是实现第一步里MyPublic接口)
public class ImplementsPublic implements MyPublic{
@Override
public void step02() {
System.out.println("step02()~~~~~~~");
}
}
4、编写各自的类(将模板类作为属性写入)
public class MyStep {
MyTemplate myTemplate;
public MyTemplate getMyTemplate() {
return myTemplate;
}
public void setMyTemplate(MyTemplate myTemplate) {
this.myTemplate = myTemplate;
}
public static void main(String[] args) {
MyStep myStep = new MyStep(); //new本类的对象
myStep.setMyTemplate(new MyTemplate()); //给本类的myTemplate属性实例化
myStep.getMyTemplate().step(new ImplementsPublic());
//调用本属性模板里step方法并传入接口以实现的类,按照模板中step方法中的步骤执行
}
}
5、结果
step01().......
step02()~~~~~~~
step03().......
二、使用抽象类实现模板设计模式
1、将公共的一致的方法和需要子类更改的抽象的方法写道一个抽象类里
public abstract class MyTemplate {
public abstract void step01();
public void step02(){
System.out.println("MyTemplate.step02()");
}
public void step03(){
System.out.println("MyTemplate.step03()");
}
public void step(){
step01();
step02();
step03();
}
}
2、写第一个实现类附加打印的结果
public class Impl01 extends MyTemplate{
@Override
public void step01() {
System.out.println("Impl01.step01()");
}
public static void main(String[] args) {
Impl01 impl01 = new Impl01();
impl01.step();
}
}
Impl01.step01()
MyTemplate.step02()
MyTemplate.step03()
3、写第二个实现类附加打印的结果
public class Impl02 extends MyTemplate{
@Override
public void step01() {
System.out.println("Impl02.step01()");
}
public static void main(String[] args) {
Impl02 impl02 = new Impl02();
impl02.step();
}
}
Impl02.step01()
MyTemplate.step02()
MyTemplate.step03()
这样就实现了由抽象的父类作为模板,里面包含了变与不变的方法,需要改变的方法就写成抽象类,交给继承的子类来完成实现,不变的方法就直接书写方法体,交给子类继承,而且方法的具体执行流程也写在了模板父类里,这样,各个子类一是要实现需要按照自己的步骤执行抽象方法,并按照父类的执行流程执行即可,这样便体现了模板方法设计模式。