豆浆制作问题
模板方法模式基本介绍
模板方法模式原理类图
模板方法模式解决豆浆制作问题
代码演示
package com.sky.template; /** * 抽象类 豆浆 */ public abstract class SoyMilk { // 模板方法,make() 模板方法可以做成final,不让子类去覆盖 final void make(){ select(); addCondiments(); soak(); beat(); } /** 以下的四个方法也可以用private进行修饰 */ // 选材料 void select(){ System.out.println("第一步:选择好的新鲜的黄豆 "); } // 添加不同的配料,抽象方法,让具体的子类去实现 abstract void addCondiments(); // 浸泡 void soak(){ System.out.println("第三步:黄豆和配料开始浸泡,需要3个小时 "); } // 打磨 void beat(){ System.out.println("第四步:黄豆和配料放到豆浆机中进行打磨 "); } } package com.sky.template; /** * 花生豆浆 */ public class PeanutSoyMilk extends SoyMilk{ /** * 添加配料 */ @Override void addCondiments() { System.out.println("添加上好的花生"); } } package com.sky.template; /** * 黑豆豆浆 */ public class BlackBeanSoyMilk extends SoyMilk{ @Override void addCondiments() { System.out.println("添加上好的黑豆 "); } } package com.sky.template; /** * 客户端 */ public class Client { public static void main(String[] args) { System.out.println("=====制作花生豆浆====="); SoyMilk peanutSoyMilk = new PeanutSoyMilk(); peanutSoyMilk.make(); System.out.println("=====制作黑豆豆浆====="); SoyMilk blackBeanSoyMilk = new BlackBeanSoyMilk(); blackBeanSoyMilk.make(); } } =====制作花生豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的花生 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作黑豆豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的黑豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨View Code
模板方法模式的钩子方法
代码演示
package com.sky.template.improve; /** * 抽象类 豆浆 */ public abstract class SoyMilk { // 模板方法,make() 模板方法可以做成final,不让子类去覆盖 final void make(){ select(); if(customerWantCondiments()){ addCondiments(); } soak(); beat(); } /** 以下的四个方法也可以用private进行修饰 */ // 选材料 void select(){ System.out.println("第一步:选择好的新鲜的黄豆 "); } // 添加不同的配料,抽象方法,让具体的子类去实现 abstract void addCondiments(); // 浸泡 void soak(){ System.out.println("第三步:黄豆和配料开始浸泡,需要3个小时 "); } // 打磨 void beat(){ System.out.println("第四步:黄豆和配料放到豆浆机中进行打磨 "); } // 钩子方法 用户判断要不要加配料 TRUE:加 FALSE:不加 boolean customerWantCondiments(){ return true; } } package com.sky.template.improve; /** * 黑豆豆浆 */ public class BlackBeanSoyMilk extends SoyMilk { @Override void addCondiments() { System.out.println("添加上好的黑豆 "); } } package com.sky.template.improve; /** * 花生豆浆 */ public class PeanutSoyMilk extends SoyMilk { /** * 添加配料 */ @Override void addCondiments() { System.out.println("添加上好的花生"); } } package com.sky.template.improve; public class PureSoyaMilk extends SoyMilk{ @Override void addCondiments() { //空实现 注:我们有时候也是能够看到在实际项目开发中也是有这样写的,使用的也是空实现 } @Override boolean customerWantCondiments() { return false; } } package com.sky.template.improve; /** * 客户端 */ public class Client { public static void main(String[] args) { System.out.println("=====制作花生豆浆====="); SoyMilk peanutSoyMilk = new PeanutSoyMilk(); peanutSoyMilk.make(); System.out.println("=====制作黑豆豆浆====="); SoyMilk blackBeanSoyMilk = new BlackBeanSoyMilk(); blackBeanSoyMilk.make(); System.out.println("=====制作纯豆浆====="); SoyMilk pureSoyaMilk = new PureSoyaMilk(); pureSoyaMilk.make(); } } =====制作花生豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的花生 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作黑豆豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的黑豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作纯豆浆===== 第一步:选择好的新鲜的黄豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨View Code
模板方法模式的注意事项和细节
标签:黄豆,方法,void,System,模式,println,配料,模板,out From: https://www.cnblogs.com/dongyaotou/p/16964306.html