学妹惊呼:使用Java8改造后的模板方法模式真的是yyds
The following article is from Hollis Author Hollis
(给程序员零距离加星标,了解项目开发.)
以前的模板方法
* 模板方法设计模式的抽象类
* @author hollis
*/
public abstract class AbstractBusinessHandler {
/**
* 模板方法
*/
public final void execute(){
getNumber();
handle();
judge();
}
/**
* 取号
* @return
*/
private void getNumber(){
System.out.println("number-00" + RandomUtils.nextInt());
}
/**
* 办理业务
*/
public abstract void handle(); //抽象的办理业务方法,由子类实现
/**
* 评价
*/
private void judge(){
System.out.println("give a praised");
}
}
@Override
public void handle() {
System.out.println("save 1000");
}
}
SaveMoneyHandler saveMoneyHandler = new SaveMoneyHandler();
saveMoneyHandler.execute();
}
save 1000
give a praised
public class DrawMoneyHandler extends AbstractBusinessHandeler {
@Override
public void handle() {
System.out.println("draw 1000");
}
}
//理财业务的实现类
public class MoneyManageHandler extends AbstractBusinessHandeler{
@Override
public void handle() {
System.out.println("money manage");
}
}
Java 8 的函数式编程
public List<String> getList() {
return new ArrayList();
}
Supplier<List<String>> listSupplier = ArrayList::new;
public void sum(String a1) {
System.out.println(a1);
}
Consumer<String> printConsumer = a1 -> System.out.println(a1);
Consumer<String> stringConsumer = (s) -> System.out.println(s.length());
Arrays.asList("ab", "abc", "a", "abcd").stream().forEach(stringConsumer);
Java 8以后的模板方法
/**
* @author Hollis
*/
public class BankBusinessHandler {
private void execute(Consumer<BigDecimal> consumer) {
getNumber();
consumer.accept(null);
judge();
}
private void getNumber() {
System.out.println("number-00" + RandomUtils.nextInt());
}
private void judge() {
System.out.println("give a praised");
}
}
/**
* @author Hollis
*/
public class BankBusinessHandler {
public void save(BigDecimal amount) {
execute(a -> System.out.println("save " + amount));
}
}
public static void main(String[] args) throws {
BankBusinessHandler businessHandler = new BankBusinessHandler();
businessHandler.save(new BigDecimal("1000"));
}
number-001736151440
save1000
give a praised
/**
* @author Hollis
*/
public class BankBusinessHandler {
public void save(BigDecimal amount) {
execute(a -> System.out.println("save " + amount));
}
public void draw(BigDecimal amount) {
execute(a -> System.out.println("draw " + amount));
}
public void moneyManage(BigDecimal amount) {
execute(a -> System.out.println("draw " + amount));
}
}
/**
* 模板方法
*/
protected void execute(Supplier<String> supplier, Consumer<BigDecimal> consumer) {
String number = supplier.get();
System.out.println(number);
if (number.startsWith("vip")) {
//Vip号分配到VIP柜台
System.out.println("Assign To Vip Counter");
}
else if (number.startsWith("reservation")) {
//预约号分配到专属客户经理
System.out.println("Assign To Exclusive Customer Manager");
}else{
//默认分配到普通柜台
System.out.println("Assign To Usual Manager");
}
consumer.accept(null);
judge();
}
public class BankBusinessHandler extends AbstractBusinessHandler {
public void saveVip(BigDecimal amount) {
execute(() -> "vipNumber-00" + RandomUtils.nextInt(), a -> System.out.println("save " + amount));
}
public void save(BigDecimal amount) {
execute(() -> "number-00" + RandomUtils.nextInt(), a -> System.out.println("save " + amount));
}
public void saveReservation(BigDecimal amount) {
execute(() -> "reservationNumber-00" + RandomUtils.nextInt(), a -> System.out.println("save " + amount));
}
}
BankBusinessHandler businessHandler = new BankBusinessHandler();
businessHandler.saveVip(new BigDecimal("1000"));
vipNumber-001638110566
Assign To Vip Counter
save 1000
give a praised
总结
文章精选1、灵魂画手:程序员不可怕,就怕程序员会画画2、员工哭诉:没了6000一天的加班费,北京房贷还不起!3、为赢过老婆打造自动瞄准弓,闭眼也能百发百中,零件电路算法全自制4、《个人信息保护法》来了!明令禁止“大数据杀熟”5、淘宝搞了个大事,支付宝可能不再是唯一了6、一位19年的Mac用户:“我真的很讨厌库克”7、笑到头掉哈哈哈哈!沙雕网站合集来一波
8、为了一个HTTPS,浏览器操碎了心···
8、为了一个HTTPS,浏览器操碎了心···