设计模式-模板设计模式

背景介绍

我们来举个例子,流水线组装电脑,你要组装不同配置的电脑,机箱,主板,内存,硬盘,CPU。不同的配置,但是其框架都是一样的,只是配置可能不同,我们只需要将改变的部分抽象出来,在子类中去做。

定义

定义一个算法的框架,,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的接口,即可定义该算法的某些特定的步骤。

这句话,我们可以这么理解,我们具体业务中,肯定会遇到业务集齐相似,但是只是在加载不同场景时有区别,这时候我们可以提取相似业务,在父类中处理,然后将子类个性的部分作为抽线函数,在子类中具体实现。设计基类的目的,就是把初始等公共做出在父类中做了,子类只负责它自己必须要做的就可以了。

下面是举例子的UML,我们通过它来实现一个。

设计模式-模板设计模式

public abstract class Computer {
    public void Box() {
        System.out.println("HP同一机箱");
    }

    public void Broad() {
        System.out.println("HP同一主板");
    }

    public abstract void RAM();

    public abstract void ROM() ;

    public abstract void CPU();

    public void construct() {
        Box();
        Broad();
        RAM();
        ROM();
        CPU();
    }
}
public class HPV1Computer extends Computer {
    @Override
    public void RAM() {
        System.out.println("16G");
    }

    @Override
    public void ROM() {
        System.out.println("256G");
    }

    @Override
    public void CPU() {
        System.out.println("I5 CPU");
    }
}
public class HPV2Computer extends Computer {

    @Override
    public void RAM() {
        System.out.println("8G内存");
    }

    @Override
    public void ROM() {
        System.out.println("128G存储");
    }

    @Override
    public void CPU() {
        System.out.println("I7 CPU");
    }
}
public class User {
    public static void main(String args[]) {
        Computer macComputer = new MacComputer();
        Computer hpComputer = new HPComputer();
        macComputer.construct();
        hpComputer.construct();
    }
}

模板模式实现起来特别简单,难就难在如何将具体的场景抽象出来,并在父类处理好。

优点:

1.封装不变部分,扩展可变部分。

2.提取公共共性,即公共部分代码,便于维护

3.行为由父类控制,子类实现。