Java 模板模式

2019-08-12  本文已影响0人  小石头呢

1.概念

2.优/缺点

优点:

缺点:

3..例子

例子1: 比如我们做菜可以分为三个步骤 (1)备料 (2)具体做菜 (3)盛菜端给客人享用,这三部就是算法的骨架 ;然而做不同菜需要的料,做的方法,以及如何盛装给客人享用都是不同的这个就是不同的实现细节。

public abstract class DodishTemplate {    
    /**
     * 具体的整个过程
     */
    protected void dodish(){
        this.preparation();
        this.doing();
        this.carriedDishes();
    }
    /**
     * 备料
     */
    public abstract void preparation();
    /**
     * 做菜
     */
    public abstract void doing();
    /**
     * 上菜
     */
    public abstract void carriedDishes ();
}
/**
 * 西红柿炒蛋
 * @author aries
 */
public class EggsWithTomato extends DodishTemplate{

    @Override
    public void preparation() {
        System.out.println("洗并切西红柿,打鸡蛋。");
    }

    @Override
    public void doing() {
        System.out.println("鸡蛋倒入锅里,然后倒入西红柿一起炒。");
    }

    @Override
    public void carriedDishes() {
        System.out.println("将炒好的西红寺鸡蛋装入碟子里,端给客人吃。");
    }

}

/**
 * 红烧肉
 * @author aries
 *
 */
public class Bouilli extends DodishTemplate{

    @Override
    public void preparation() {
        System.out.println("切猪肉和土豆。");
    }

    @Override
    public void doing() {
        System.out.println("将切好的猪肉倒入锅中炒一会然后倒入土豆连炒带炖。");
    }

    @Override
    public void carriedDishes() {
        System.out.println("将做好的红烧肉盛进碗里端给客人吃。");
    }

}

例子2:我们需要知道一段代码的执行时间,当我们用一个抽象类的时候就可以避免多次使用相同的代码,优化结构。

ackage swu.xl.day6.MoBan;

/**
 * 需求:创建一个模板
 * 使用这个模板可以方便的测出某个代码块的执行效率
 */
abstract class TimeTemplate{

    //通过实现这个方法获得具体测量的代码
    public abstract void code();

    //提供一个方法,实现测量
    public void caculateTime(){

        long start =  System.currentTimeMillis();

        //测量的代码
        code();

        long end  = System.currentTimeMillis();

        System.out.println(end-start);
    }
}

class MyCode extends TimeTemplate{

    @Override
    public void code() {
        //测试代码
        int total = 0;
        for (int i = 0; i < 1000000000; i++) {
             total += i;
        }
    }
}

public class MyClass {

    public static void main(String[] args){

        MyCode myCode = new MyCode();
        myCode.caculateTime();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读