模板方法模式

    温习下模板方法模式。模板方法中定义一个模板基类,将共性的部分在基类中实现,将拓展部分交给子类实现。也算是遵循对拓展开放,对修改关闭的原则。同时也可以定义一些开关给到子类做拓展。

package com.pattern.template;

/**
 * 模板方法
 * @author hcguo
 *
 */
public abstract class DrinkTemplate {
     
 /**
     *准备饮料
     */
    public final void prepareDrinkTemplate(){
       /*
        * step1煮水
        */
       boilWater();
       /*
        * step2加入饮料颗粒或茶叶或其它冲剂到杯中
        */
       addPowder();
       /*
        * step3导入水到饮料杯中
        */
       putIntoCup();
       /*
        * step4用对应包装打包饮料
        * 子类中可决定是否需要打包或者堂食
        */
       if(NeedPackage()){
           packageDrink(); 
       }
      }

 protected boolean NeedPackage() {
  return true;
 }


 /**
  * 这是通用方法,无需子类重写
  */
 private void boilWater() {
  System.out.println("煮水"); 
 }

 /**
  * 具体饮料加不同的饮料冲级,由子类实现
  */
 protected abstract void addPowder();

 /**
  * 这是通用方法,无需子类重写
  */
 private void putIntoCup() {
  System.out.println("倒入杯中");
  
 }
 
 /**
  * 不同的饮料打不通的包装,由子类实现
  */
 protected abstract void packageDrink();

}

 

 

package com.pattern.template;

public class Coffee extends DrinkTemplate {

 @Override
 protected void addPowder() {
         System.out.println("加入咖啡粉");
 }

 @Override
 protected void packageDrink() {
  System.out.println("用咖啡饮料包装打包咖啡");
 }
 
 @Override
 protected boolean NeedPackage() {
  return false;
 }

}

 

package com.pattern.template;

public class OrangeJuice extends DrinkTemplate{ @Override
 protected void addPowder() {
  //现在的黑心商贩都是加冲剂,
  System.out.println("加入橙子味冲剂");  
 }

 @Override
 protected void packageDrink() {  
  System.out.println("用装橙汁的包装打包橙汁");  
 } 
}

 

 

package com.pattern.template;

public class TemplateTest {
    public static void main(String args[]){
     
     System.out.println("*******开始泡咖啡***********");
     //泡咖啡
     DrinkTemplate coffee = new Coffee();
     coffee.prepareDrinkTemplate();
     
     
     System.out.println("*******开始冲橙汁***********");
     //冲橙汁
     DrinkTemplate juice = new OrangeJuice();
     juice.prepareDrinkTemplate();
    }
}

 

 

 

转载于:https://my.oschina.net/u/3403903/blog/875429

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值