软件设计模式-模板方法设计模式

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833
这个作业的目标 了解设计原则和设计模式
  • 参考资料
    • 郑阿奇《软件秘笈:设计模式那点事》

1设计模式六原则

  • 接口隔离原则:用户不需要实现他不需要的接口
  • 里氏代换原则:子类应该能完成父类支持的所有行为
  • 最小知道原则:对象间的依赖越少越好
  • 依赖倒置原则:程序设计不应该依赖实现而依赖其抽象
  • 单一职责原则:每一个类最好只完成一项职责
  • 开闭原则:程序对拓展开放,而对修改封闭

2设计模式汇总

  • 创建型模式:
    • 抽象工厂
    • 生成器
    • 工厂方法
    • 原型
    • 单例
  • 结构型模式:
    • 适配器
    • 桥接
    • 组合
    • 装饰
    • 外观
    • 享元
    • 代理
  • 行为型模式:
    • 责任链
    • 命令
    • 解释器
    • 迭代器
    • 中介者
    • 备忘录
    • 观察者
    • 状态
    • 策略
    • 模板方法
    • 访问者

3模板方法设计模式介绍

在父类的一个方法中定义一个总体算法的骨架(模板方法),而将某一些一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤。

抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。

在JavaWeb中:HttpServlet类中,也遵循这一命名规则,如doGet(),doPost()等方法。

抽象父类至少提供的方法:

  • 模板方法:一种通用的处理方式,即模板(总体算法的骨架);模版方法作为模版样式不准子类覆写:用final修饰,不让子类覆盖.
  • 抽象方法:一种具体的业务功能实现,由子类完成;使用protected修饰.

注意:

抽象父类提供的模版方法只是定义了一个通用算法,其实现必须依赖子类的辅助。

4模板方法设计模式应用实例

4.1例子一

4.2例子二

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

抽象类AbstractClass

public abstract class AbstractPerson{
//抽象类定义整个流程骨架
public void prepareGotoSchool(){
dressUp();
eatBreakfast();
takeThings();
}

​ //以下是不同子类根据自身特性完成的具体步骤
​ protected abstract void dressUp();
​ protected abstract void eatBreakfast();
​ protected abstract void takeThings();
}

具体类ConcreteClass

public class Student extends AbstractPerson{
@Override
protected void dressUp() {
System.out.println(“穿校服");
}
@Override
protected void eatBreakfast() {
System.out.println(“吃妈妈做好的早饭");
}

​ @Override
​ protected void takeThings() {
​ System.out.println(“背书包,带上家庭作业和红领巾");
​ }

}

public class Teacher extends AbstractPerson{
@Override
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();
​ }
}

4.3总结

  • 优点

    • 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
    • 子类实现算法的某些细节,有助于算法的扩展。
    • 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
  • 缺点

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

    • 在某些类的算法中,用了相同的方法,造成代码的重复。
    • 控制子类扩展,子类必须遵守算法规则。

原文地址:https://www.cnblogs.com/iamwatershui/p/14549489.html