> 文章列表 > 模板方法模式详解

模板方法模式详解

模板方法模式详解

什么时候才能拿到心仪的offer啊…👊👊👊

模板方法设计模式:

模板方法设计模式定义了一个算法的骨架不同的子类可以去实现不同的行为。但是算法骨架是不能被改变的,也就是方法执行的顺序,不同的子类可以对方法进行重写,但是不能重写骨架的顺序。
模板方法设计模式也有一个缺点,如果想实现不同的行为,就需要定义不同的子类,导致类的个数增加,所以会导致系统更复杂

模板办法涉及到的两个类:

模板类:定义了算法的骨架
实现类:在不改变骨架的前提下重写方法

案例:登录CSDN掘金

假如有一天,你突发奇想想学习,所以你就去CSDN上来找资源,假设你之前连个账号都没有,所以你需要先注册一个账号,然后在登陆页面输入你的帐号以及密码并且点击登录,最后你成功进入到了社区并且开始找资源学习。当你学了一会儿,你发现CSDN的资源不够,所以你又去了掘金,你也没有掘金账号。咋办?注册一个呗!同样的步骤,注册账号-输入用户名和密码-点击登录-登陆成功...

下面我们就用模板方法来模拟一下这个过程。

算法骨架(你进入社区的过程):

package com.app.template_app;public abstract class Template {public abstract void register();//注册public abstract void input();//输入public abstract void login();//登录public abstract void welcome();//成功public final void process(){register();input();login();welcome();}
}

你在CSDN登陆的过程:

package com.app.template_app;public class CSDN extends Template{@Overridepublic void register() {System.out.println("新用户需要先注册~");}@Overridepublic void input() {System.out.println("输入用户名和密码~");}@Overridepublic void login() {System.out.println("输入完成,点击登录~");}@Overridepublic void welcome() {System.out.println("登陆成功,欢迎进入csdn社区~");}
}

你在掘金登陆的过程:

package com.app.template_app;public class Juejin extends Template{@Overridepublic void register() {System.out.println("新的掘金用户需要先进行注册~");}@Overridepublic void input() {System.out.println("请输入用户名和密码~");}@Overridepublic void login() {System.out.println("输入完成,点击登录~");}@Overridepublic void welcome() {System.out.println("欢迎来到掘金社区~");}
}

测试类:

package com.app.template_app;public class TestTemApp {public static void main(String[] args) {CSDN csdn = new CSDN();csdn.process();Juejin juejin = new Juejin();juejin.process();}
}

模板方法减少了冗余的代码,用在spring的事务管理器中。