设计模式-模板设计模式
背景介绍
我们来举个例子,流水线组装电脑,你要组装不同配置的电脑,机箱,主板,内存,硬盘,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.行为由父类控制,子类实现。