合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 模板设计模式 ### 定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变改算法结构的情况下重新定义该算法的某些特定步骤,属于行为模式。 ### ## 应用场景 ### 有多个子类共有逻辑相同的方法,可以考虑作为模板方法 ### 设计一个系统时知道了算法所需的关键步骤且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,可以延迟到子类当中进行。 ### ## 角色 ### **抽象模板**:定义⼀个模板⽅法,这个模板⽅法⼀般是⼀个具体⽅法,给出⼀个顶级算法⻣架,⽽逻辑⻣架的组成步骤在相应的抽象操作中,推迟到⼦类实现。 ### **模板方法**:定义了算法的⻣架,按某种顺序调⽤其包含的基本⽅法 ### 基本方法:是整个算法中的⼀个步骤,包括抽象⽅法和具体⽅ 抽象⽅法:在抽象类中申明,由具体⼦类实现。 具体⽅法:在抽象类中已经实现,在具体⼦类中可以继承或重写它。 ### **具体模板**(Concrete Template):实现⽗类所定义的⼀个或多个抽象⽅法,它们是⼀个顶级算法逻辑的组成步骤 ### ![](https://img.kancloud.cn/ae/5c/ae5c6b4e59f2c596162583d3ce57ceb6_1718x900.png) ### ## 具体实现(云效代码study-java项目当中设计模式当中有代码案例) ### **抽象模板** ~~~ package com.goldnecis.设计模式.模版模式.design; //1、首先定义一个抽象模板 定义一些模板方法 public abstract class AbstractProjectManager { //1.1、定义一个基本方法 是整个的执行步骤 里面的调用可以包括抽象方法和具体方法 public final void processProject(){ //4、像review()、design()这两个方法都是实现了的具体的方法 在子类当中可直接使用因为被继承了 实力化子类之后也可以调用夫类的processProject()方法 review(); design(); //5、像下面这些抽象方法在子类当中去实现了 // AbstractProjectManager projectManager = new PayServiceProjectManager(); // AbstractProjectManager projectManager = new UserServiceProjectManager(); // 所以都可以通过processProject()父类的方法去找到具体子类当中实现了的具体实现方法 coding(); test(); online(); } //1.2、我们可以在抽象类当中定义一些具体的实现方法供子类当中去调用 //各个项目都需要评审 public void review(){ System.out.println("项目需求评审"); } //1.2、我们可以在抽象类当中定义一些具体的实现方法供子类当中去调用 //各个项目都需要设计 public void design(){ System.out.println("UI UE进行设计"); } //1.3、对于没有共性的方法我们可以定义为抽象方法 在子类当中去实现个性化的操作 //抽象方法 由具体子类进行实现 编码耗时不一样 public abstract void coding(); //1.3、对于没有共性的方法我们可以定义为抽象方法 在子类当中去实现个性化的操作 //抽象方法 由具体子类进行实现测试有多种 public abstract void test(); //1.3、对于没有共性的方法我们可以定义为抽象方法 在子类当中去实现个性化的操作 //抽象方法 由具体子类进行实现 上线 public abstract void online(); } ~~~ **具体抽象模板** ### ![](https://img.kancloud.cn/6d/04/6d044b1ca15fed3c342f6ff32a393810_1739x746.png) ### **调用:** ![](https://img.kancloud.cn/5f/27/5f279e2956e3f9366464defb3b349975_1333x644.png)