c++ template,java view template_Java设计模式之模板方法模式(Template Method)

 2023-09-26 阅读 23 评论 0

摘要:本文继续介绍23种设计模式系列之模板方法模式。概述模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩

本文继续介绍23种设计模式系列之模板方法模式。

概述

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

c++ template?比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

模式中的角色

抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

java模板方法设计模式,应用

举个例子,以准备去学校所要做的工作(prepareGotoSchool)为例,假设需要分三步:穿衣服(dressUp),吃早饭(eatBreakfast),带上东西(takeThings)。学生和老师要做得具体事情肯定有所区别。

抽象类AbstractClass

public abstract class AbstractPerson{

模板还是模板,//抽象类定义整个流程骨架

public void prepareGotoSchool(){

dressUp();

eatBreakfast();

template,takeThings();

}

//以下是不同子类根据自身特性完成的具体步骤

protected abstract void dressUp();

java gui,protected abstract void eatBreakfast();

protected abstract void takeThings();

}

具体类ConcreteClass

java 泛型、public class Student extends AbstractPerson{

@Override

protected void dressUp() {

System.out.println(“穿校服");

设计模式java,}

@Override

protected void eatBreakfast() {

System.out.println(“吃妈妈做好的早饭");

java。}

@Override

protected void takeThings() {

System.out.println(“背书包,带上家庭作业和红领巾");

template类模板?}

}

public class Teacher extends AbstractPerson{

@Override

java metric?protected void dressUp() {

System.out.println(“穿工作服");

}

@Override

protected void eatBreakfast() {

System.out.println(“做早饭,照顾孩子吃早饭");

}

@Override

protected void takeThings() {

System.out.println(“带上昨晚准备的考卷");

}

}

public class Client {

public static void main(String[] args) {

Student student = new Student()

student.prepareGotoSchool();

Teacher teacher  = new Teacher()

teacher.prepareGotoSchool();

}

}

优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

子类实现算法的某些细节,有助于算法的扩展。

通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

适用场景

在某些类的算法中,用了相同的方法,造成代码的重复。

控制子类扩展,子类必须遵守算法规则。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/98487.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息