作为菜鸟的我,感觉如果做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宽泛(代码,逻辑,变量,标准功能,服务)
模板方法模式---->使用继承---->达到重用。