1)制作豆浆的流程 选材 – 》添加配料 --》浸泡 --》放到豆浆机打碎 1)模板方法模式(Template Method Pattern),又叫做模板模式(Template Pattern),在一个抽象类定义类执行它的方法的模版。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
1)应用实例要求 package com.example.demo.template; /** * 抽象类,表示豆浆 * @author zhaozhaohai * */ public abstract class SoyaMilk { /** * 模版方法,make,模版方法可以做成final,不让子类去覆盖。 */ final void make() { select(); addCondiments(); soak(); beat(); } /** * 选材料 */ void select() { System.out.println("第一步 :选择好的新鲜黄豆 "); } /** * 添加不同的配料,抽象方法,子类具体实现 */ abstract void addCondiments(); /** * 浸泡 */ void soak() { System.out.println("第三步 :黄豆和配料开始浸泡,需要3小时 "); } void beat() { System.out.println("第四步 :黄豆和配料放到豆浆机去打碎 "); } } package com.example.demo.template; public class RedBeanSoyaMilk extends SoyaMilk{ @Override void addCondiments() { // TODO Auto-generated method stub System.out.println(" 加入上好的红豆 "); } } package com.example.demo.template; public class PeanutSoyaMilk extends SoyaMilk{ @Override void addCondiments() { // TODO Auto-generated method stub System.out.println(" 加入上好的花生 "); } } package com.example.demo.template; public class Client { public static void main(String[] args) { // 制作红豆豆浆 System.out.println("-- 制作红豆豆浆 --"); SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk(); redBeanSoyaMilk.make(); System.out.println("-- 制作花生豆浆 --"); SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk(); peanutSoyaMilk.make(); } } 1)在模板方法模式的父类中,定义一个方法,它默认不做任何事,子类可以视情况要不要覆盖它,该方法称为“钩子”。 package com.example.demo.template; /** * 抽象类,表示豆浆 * @author zhaozhaohai * */ public abstract class SoyaMilk { /** * 模版方法,make,模版方法可以做成final,不让子类去覆盖。 */ final void make() { select(); if (customerWantCondiments()) { addCondiments(); } soak(); beat(); } /** * 选材料 */ void select() { System.out.println("第一步 :选择好的新鲜黄豆 "); } /** * 添加不同的配料,抽象方法,子类具体实现 */ abstract void addCondiments(); /** * 浸泡 */ void soak() { System.out.println("第三步 :黄豆和配料开始浸泡,需要3小时 "); } void beat() { System.out.println("第四步 :黄豆和配料放到豆浆机去打碎 "); } /** * 钩子方法,决定是否需要添加配料 * @return */ boolean customerWantCondiments() { return true; } } package com.example.demo.template; public class PureSoyaMilk extends SoyaMilk{ @Override void addCondiments() { // TODO Auto-generated method stub // 空实现 } @Override boolean customerWantCondiments() { // TODO Auto-generated method stub return false; } }
|
|