每天学点设计模式之---模板方法模式

模板方法模式的定义理解:

模板方法:父类中定义好算法的的完整执行框架,子类根据自身需求实现具体的算法步骤;

比如珍珠奶茶的制作流程,可以总结出一套固定的执行流程,

1.先准备一杯清水河一个塑料杯子
2.在准备好的塑料杯中添加珍珠奶茶需要的原料和水混合
3.将准备好的奶茶密封起来,完工了;

上面是总体上的珍珠奶茶的制作完整流程;但是客户A需要原味的珍珠奶茶,客户B需要奶香的珍珠的奶茶,
所以具体制作的时候,在第二部中根据客户的需求添加不同的原料来制作;
这个就是整体制作流程不改变,但是具体做那种味道的,完全是更具需求的变化;

模板方法模式的UML图


BubbleTea里面的三个方法对应了奶茶制作的三步流程;
各种奶茶不需要实现全部的流程,只需要制作自己的独特的味道,实现的定的方法mix();,因为只有这一步有变化;

模板方法模式代码实操:

1.首先珍珠奶茶的整体制作:

public abstract class BubbleTea {

    /**
     * 珍珠奶茶的生产步骤,这个步骤无需重新区写了
     */
    public final void processBubbleTea() {
        // 1.准备好亲水和塑料杯
        prepare();
        // 2.添加调料
        mix();
        // 3.制作完成了
        finishTea();
    }

    private void prepare() {
        System.out.println("准备好亲水和塑料杯");
    }

    /**
     * 原材料种类多样,这里不能够统一实现,所以需要子类看情形一一去实现
     */
    protected abstract void mix();

    private void finishTea() {
        System.out.println("奶茶密封");

    }

}

2,各种口味的珍珠奶茶的制作


/**
 * 原味珍珠奶茶
 * 
 * @author shion
 * 
 */
public class A extends BubbleTea {

    @Override
    protected void mix() {
        System.out.println("混和了原味的奶茶");

    }

}
/**
 * 奶香味的珍珠奶茶
 * 
 * @author shion
 * 
 */
public class B extends BubbleTea {

    @Override
    protected void mix() {
        System.out.println("混和了奶香味道的奶茶");

    }

}

3,代码实操验证

public class Test {
    public static void main(String[] args) {
        // 制作原味奶茶
        BubbleTea a = new A();
        a.processBubbleTea();
        System.out.println("******************************");
        // 制作奶香为奶茶
        BubbleTea b = new B();
        b.processBubbleTea();

    }
}

打印如下:

准备好亲水和塑料杯
混和了原味的奶茶
奶茶密封
******************************
准备好亲水和塑料杯
混和了奶香味道的奶茶
奶茶密封

以上就是我对模板方法模式的理解认识;

猜你喜欢

转载自blog.csdn.net/eyishion/article/details/81545164