Java模板方法设计模式

模板方法设计模式

在现实生活中,完成某件事是需要n多个固定步骤的。如"在淘宝网进行购物"这件事情的完成一般需要三个步骤:登录网站、挑选商品、付款。但对于每个人几乎都是相同的操作,但不同的地方是,每个人挑选的商品时不同的。

在软件开发过程中同样存在这样的情况,某类的某个方法的实现,需要几个固定步骤。在这些固定步骤中,对于该类的不同对象,有些步骤地实现是固定不变的,有些步骤的实现是大相径庭的,有些步骤的实现是可便可不变的,对于这种情况,就是合适用模板方法设计模式编程。

模板方法设计模式的定义是定义了一个操作中某种算法的框架,而将一些步骤延迟到子类中。模板方法设计模式使得子类在不改变一个算法结构的前提下,对某些步骤实现个性化定义。

模板方法程序构成

在末班方法设计模式中,存在一个父类,其中包含两类方法:模板方法与步骤方法。

模板方法:即完成模板方法的每个阶段性方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。

步骤方法:即完成模板方法的每个阶段性方法,每个步骤方法完成某一特定的、完成总算法的一部分功能。步骤方法有三种类型:抽象方法、最终方法与钩子方法。

抽象方法:即要求子类必须实现的方法,是完成模板方法的算法步骤中必须由自雷完成的个性化定义。

最终方法:是子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一言过的步骤。

钩子方法:是父类给出了默认实现,但子类也可以重写的方法。

 

 

Demo

抽象类:

publicabstractclass Shopping {

    // 模板方法

    publicvoid buyGoods() {

        // 步骤方法

        userLogin();

        buy();

        // 步骤方法

        pay();

 

    }

 

    // 模板方法用户登录子类不能重写的方法

    privatefinalvoid userLogin() {

        System.out.println("用户登录");

 

    }

 

    // 步骤方法 -抽象方法子类必须实现的方法

    publicabstractvoid buy();

 

    // 步骤方法- 钩子方法使用银联卡支付

    publicvoid pay() {

        System.out.println("使用银联卡支付");

 

    }

}

 

两个实现类:

publicclass ClothesShopping extends Shopping{

 

    @Override

    publicvoid buy() {

        System.out.println("购买七匹狼男装");

        

    }

    @Override

    publicvoid pay() {

        System.out.println("使用支付宝付款");

    }

 

}

 

publicclass ShoesShopping extends Shopping {

 

    @Override

    publicvoid buy() {

        System.out.println("购买红蜻蜓皮鞋");

    }

 

}

 

测试类:

publicclass MyTest {

 

    

    publicstaticvoid main(String[] args) {

        Shopping shoesShopping = new ShoesShopping();

        shoesShopping.buyGoods();

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

        Shopping clothesShopping = new ClothesShopping();

        clothesShopping.buyGoods();

        

        

    }

 

}

运行截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sonwing_for

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值