模板方法模式详解
什么时候才能拿到心仪的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的事务管理器中。