zoukankan      html  css  js  c++  java
  • 软件设计模式-模板方法设计模式

    这个作业属于哪个课程 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总结

    • 优点

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

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

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

  • 相关阅读:
    python yield from (一)
    python yield: send, close, throw
    python I/O多路复用 使用http完成http请求
    python I/O复用
    python 进程间通信
    mac 使用express -e ./
    Object.keys使用整理
    MacBook pro管理员变成普通用户无法解锁问题
    MAC应用无法打开或文件损坏的处理方法
    Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题的解决
  • 原文地址:https://www.cnblogs.com/iamwatershui/p/14549489.html
Copyright © 2011-2022 走看看