模板方法模式

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

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

首先:

建立一个抽象基类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又只是支持单继承机制,所以面对以前遗留的系统很难将模板方法套用上去。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值