· 尚可 · 工程技术 · 2 分钟阅读

模板方法

模板方法

功能描述 封装了算法的骨架,让子类去做算法的实现。和建造者模式很像。 代码结构 UML类图 代码示例 假设需要做一份黄金蛋炒饭,鸡蛋和米饭怎么获取,这个由各个厨师自己决定,为了能够做出黄金蛋炒饭,厨师长控制了炒饭的制作步…

功能描述

封装了算法的骨架,让子类去做算法的实现。和建造者模式很像。

代码结构

UML类图

代码示例

假设需要做一份黄金蛋炒饭,鸡蛋和米饭怎么获取,这个由各个厨师自己决定,为了能够做出黄金蛋炒饭,厨师长控制了炒饭的制作步骤…

  • 厨师长定义的做黄金蛋炒饭的步骤
public abstract class FriedRice {

    abstract void getEgg();

    abstract void getRice();

    final void doFriedRice(){

        System.out.println("准备制作黄金炒饭:先炒米饭,然后倒入鸡蛋液!");
        this.getRice();
        System.out.println("米饭下锅翻炒...");

        this.getEgg();
        System.out.println("将鸡蛋液倒入锅中翻炒...");

        System.out.println("黄金炒饭制作完成!");

//        System.out.println("准备制作普通炒饭:先炒鸡蛋,然后倒入米饭混合炒!");
//        this.getEgg();
//        System.out.println("将鸡蛋液倒入锅中翻炒...");
//
//        this.getRice();
//        System.out.println("米饭下锅翻炒...");
//
//        System.out.println("普通炒饭制作完成!");
    }
}

如果改变了步骤,使用同样的原料就可以做出普通蛋炒饭了。

  • 厨师通过自己的渠道获取原材料
public class GoldFriedRice extends FriedRice {
    @Override
    void getEgg() {
        System.out.println("从冰箱拿出鸡蛋!");
    }

    @Override
    void getRice() {
        System.out.println("从冰箱拿出昨天剩下的米饭!");
    }
}
  • 制作黄金蛋炒饭
public class TestTempMethod {

    public static void main(String[] args) {

        FriedRice friedRice = new GoldFriedRice();
        friedRice.doFriedRice();

    }
}

优缺点

优点:复用了代码,封装了不变的部分,将变化的部分延迟到了子类中实现,提高了扩展性。

缺点:使用了抽象类,每个不同的实现都需要一个子类,增加了复杂度。

Share:
返回文章列表
领域驱动设计
工程技术

领域驱动设计

复杂软件设计的解决方案 DDD是Domain-Driven Design(领域驱动设计)的简称,它是一种解决复杂软件设计的方法论,它试图分离技术实现的复杂性,并围绕业务概念构建的领域模型,以解决软件难以理解,难以演进的问…

什么是CAP定理
工程技术

什么是CAP定理

什么是CAP定理? CAP定理告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,…