编写制作豆浆的程序,说明如下:
对原理类图的说明-即(模板方法模式的角色及职责)
编写制作豆浆的程序,说明如下:
制作豆浆的流程选材--->添加配料--->浸泡--->放到豆浆机打碎
通过添加不同的配料,可以制作出不同口味的豆浆
选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的(红豆、花生豆浆。。。)
package com.flower.template;
public class TestMain {
public static void main(String[] args) {
SoyMilk redBeanSoyMilk = new RedBeanSoyMilk();
SoyMilk peanutSoyMilk = new PeanutSoyMilk();
redBeanSoyMilk.make();
peanutSoyMilk.make();
}
}
abstract class SoyMilk {
/**
* 模板方法
*/
final void make(){
// 顺序调用
select();
addCondiments();
soak();
beat();
}
// 选择材料
void select(){
System.out.println("选择上好的黄豆!");
}
// 抽象方法 添加辅料
abstract void addCondiments();
// 浸泡
void soak(){
System.out.println("浸泡");
}
void beat(){
System.out.println("研磨打碎");
}
}
class RedBeanSoyMilk extends SoyMilk{
@Override
void addCondiments() {
System.out.println("加入上好的红豆");
}
}
class PeanutSoyMilk extends SoyMilk{
@Override
void addCondiments() {
System.out.println("加入上好的花生");
}
}
package com.flower.template;
public class TestMain {
public static void main(String[] args) {
SoyMilk redBeanSoyMilk = new RedBeanSoyMilk();
SoyMilk peanutSoyMilk = new PeanutSoyMilk();
redBeanSoyMilk.make();
peanutSoyMilk.make();
SoyMilk pureSoyMilk = new PureSoyMilk();
pureSoyMilk.make();
}
}
abstract class SoyMilk {
protected boolean isAdd;
public SoyMilk(boolean isAdd) {
this.isAdd = isAdd;
}
public SoyMilk() {
this.isAdd = true;
}
/**
* 模板方法
*/
final void make(){
// 顺序调用
select();
if(isAdd){
addCondiments();
}
soak();
beat();
}
// 选择材料
void select(){
System.out.println("选择上好的黄豆!");
}
// 抽象方法 添加辅料
abstract void addCondiments();
// 浸泡
void soak(){
System.out.println("浸泡");
}
void beat(){
System.out.println("研磨打碎");
}
}
class RedBeanSoyMilk extends SoyMilk{
public RedBeanSoyMilk() {
super(true);
}
@Override
void addCondiments() {
System.out.println("加入上好的红豆");
}
}
class PeanutSoyMilk extends SoyMilk{
public PeanutSoyMilk() {
super(true);
}
@Override
void addCondiments() {
System.out.println("加入上好的花生");
}
}
abstract class NoCondimentsSoyMilk extends SoyMilk{
public NoCondimentsSoyMilk() {
super(false);
}
void addCondiments(){
};
}
class PureSoyMilk extends NoCondimentsSoyMilk{
}
SpringIOC容器初始化时运用到的模板方法模式
类图