您的位置:首页 > 其它

模板方法模式

2014-11-06 00:21 155 查看
       模板方法,顾名思义,意思就是制定一个模板来执行程序,这是我们程序开发中的一个比较常用的一种模式,下面我来给大家展示一个模板方法的例子和模板方法的利弊:

      需求分析:就算我们银行系统的业务也是一样,都有一个流程要进行业务。要去银行办理业务的时候一般都会走一个这样的流程,取预约号,等待呼叫,办理业务,业务办理后预约号销毁。这样的话,按照我们之前没有封装的话,我们就会每一个对象都会给他们加这个业务的实现,这样就会重复很多代码,不利于维护,代码量也比较多,同时,不同的人办理的业务是不一样的,也就是前流程他们走的是一样的,但是办理的业务是不一样的。那我们将他们重复的一样的流程抽取出来,封装成一个抽象基类,这个抽象基类的作用就是规定整个算法的框架。下面我们举个例子:比如甲乙两个学生,他们每天都会起床,上学,回家,睡觉。这几个动作,但是他们的上学的方式和回家的方式不一样,甲是搭公交去上学,乙是骑自行车,那这样我们就可以将这四个方法放在抽象基类的算法框架里面。将上学,回家这两个方法做成抽象方法,让具体的子类继承时改写。

首先:

建立一个抽象基类Baselucheng

package com.example.moban;

public abstract class Baselucheng {

    /*

     * 定义抽象基类的方法,final的作用是规定好整个框架的算法,不能被子类继承改写,在print()方法中调用四个方法

     */

    public final void print(){

        

        wakeUp();

        goSchool();

//这是勾的形式,就是可以给子类判定需不需要执行该方法

        if(isGoHome()){goHome();}

        goBed();

    }

    protected abstract boolean isGoHome() ;

    private void goBed() {

        System.out.println("主人睡觉了");

        

    }

    /*

     * 该方法根据不同的子类,进行不同的操作

     */

    protected abstract void goHome();

        /*

         * 同上

         */

    protected abstract  void goSchool();

    private void wakeUp() {

    System.out.println("主人起床了");

    }

}

定义两个实体Persion01 (甲)

package com.example.moban;

//继承抽象基类

public class Persion01 extends
Baselucheng {

//重写回家的方法

    @Override

    protected void goHome() {

        System.out.println("搭公交回家");

        

    }

//重写去上学的方法

    @Override

    protected void goSchool() {

        System.out.println("搭公交去上学");

        

    }

//钩子,可以判定是否需要执行对应的方法

    @Override

    protected boolean isGoHome() {

        return false;

    }

}

Persion02

package com.example.moban;

public class Person01 extends Baselucheng {

    @Override

    protected void goHome() {

        System.out.println("骑自行车去回家");

        

    }

    @Override

    protected void goSchool() {

        System.out.println("骑自行车去学校");

        

    }

    @Override

    protected boolean isGoHome() {

        

        return true;

    }

}

下面我们写个测试类PersonTest

package com.example.moban;

public class PersonTest {

    public static void main(String args[])

    {

        Baselucheng persion01=new Person01();

        Baselucheng persion02=new Person02();

        System.out.println("这是甲的一天");

        persion01.print();        

        System.out.println("----------------------------------------------");

        System.out.println("这是乙的一天");

        persion02.print();

            }

}

---------------------------------------------------执行结果---------------------------------------------------------------------

这是甲的一天

主人起床了

搭公交去上学

搭公交回家

主人睡觉了

----------------------------------------------

这是乙的一天

主人起床了

骑自行车去学校

骑自行车去回家

主人睡觉了

-------------------------------------------------------------------------------------------------------------------------------------------

会根据子类的不同改写方法调用。这就是模板方法模式

相信模板方法的好处大家已经可以看到了吧。非常容易封装,也容易拓展,只需要在子类中实现相对应的方法,其余相同的方法交给抽象基类去实现。

 弊端就是:我们以后出去工作很多都是以前遗留的系统,里面很多代码重复,但是由于很多实现类已经继承了相对应的类,而JAVA又只是支持单继承机制,所以面对以前遗留的系统很难将模板方法套用上去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息