Java设计模式之模板方法模式

30 篇文章 0 订阅

作为菜鸟的我,感觉如果做Java开发的时候,我们一定要有设计模式的思想,不然别人的代码你看不懂,自己写的代码又没质量,简单来说就是太肤浅了。设计模式的作用是什么?是为了让代码更高效,不会显得那么冗余,从而使代码质量得到大大的提高。在Java开发中,一共有23种设计模式。今天,我来回顾一下模板模式。

1.什么导致我们要应用模板模式?

由于开发中,我们的需求会有变化,同时也会导致代码的重复,从而代码我们难以维护。所以我们就需要通过模板模式来解决它,让代码减少冗余,代码质量提高,方便代码的后期维护。(变化和维护)

2.那什么是模板模式?

在我看来,我们可以联系我们中国的活字印刷术,这个故事想必大家都十分了解。早期,我们国家为了复印一些书籍,常常会雕刻一些固定的模板去印刷出来书籍,随着后期读者对书籍的需求越来越大,总是一味着刻模板,也不是个事,为什么呢?耗时,耗力,用过之后就没用了。这不就想我们在开发中一样,把代码写的很死板,不利于代码后期的维护。后来,为了一劳永逸,满足广大读者的需求,我们的祖先就发明了活字印刷术,把每个字抽离出来,这不就和我们开发中的父类一样有很多方法,有的字在这篇文章可以做名词,在那篇文章有可以做形容词或者动词,这不就和父类中的抽象方法一样吗?有的字天生就是助词没办法就是父类的方法,同时,造句时,我们要注意顺序问题。  是不是顿时感觉很形象,简单而易懂!

3.那我们通过什么方法去实现模板模式?

这不是很明显,通过继承来实现。下面我来用四个类实现所谓的模板模式。

父类:

<span style="font-size:18px;">package com.example.boom.bmapproject.bean;

/**
 * Created by Boom on 2016/8/24.
 */

public abstract class TravelPeople {
    public void travel() {
        ticket();
        travelWay();
        play();
    }

    //买票
    protected final void ticket() {
        System.out.print("Buy Tickets!");
    }

    //旅游的方式(抽离抽象方法  让子类实现)
    protected abstract void travelWay();

    //玩
    protected final void play() {
        System.out.print("Play!");
    }
}</span>

子类一:

<span style="font-size:18px;">package com.example.boom.bmapproject.bean;

/**
 * Created by Boom on 2016/8/24.
 */

public class PeopleByBoat extends TravelPeople {
    @Override
    protected void travelWay() {
        System.out.print("By Boat!");
    }
}</span>

子类二:

<span style="font-size:18px;">package com.example.boom.bmapproject.bean;

/**
 * Created by Boom on 2016/8/24.
 */

public class PeopleByBus extends TravelPeople {
    @Override
    protected void travelWay() {
        System.out.print("By Bus!");
    }
}</span>

子类三:

<span style="font-size:18px;">package com.example.boom.bmapproject.bean;

/**
 * Created by Boom on 2016/8/24.
 */

public class PeopleByAir extends TravelPeople {
    @Override
    protected void travelWay() {
        System.out.print("By Air!");
    }
}</span>
让我们分析一下:

父类:TravelPeople一个抽象的类包含三个方法 ticket()有具体方法体的方法 ,travelWay()抽象方法  play()有具体方法体的方法。

子类:

PeopleByAir  PeopleByBoat   PeopleByBus

他们都实现一个各自独特的方法:travelWay()

父类的travel()是为了保持代码顺序;
 
Uml图

 

(注意)其中:我们可以在父类使用private/protected final去定义方法,是为了防止子类完全覆盖父类的方法。

  DRY(Don't  Repreat  Youself)原则是软件开发中极其重要的一条原则,易于我们代码更为健壮,易于维护和阅读。\

  DRY-->不要复制自己

 OAOO-->仅一次,要避免代码重复。

 DRY比OAOO宽泛(代码,逻辑,变量,标准功能,服务)

 模板方法模式---->使用继承---->达到重用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值