【设计模式-4.4】行为型——模板方法模式

说明:本文介绍设计模式中行为型设计模式中的,模板方法模式;

生存

模版方法模式是行为型设计模式,关注于对象的行为。在《秒懂设计模式》(刘韬 著)中举了一个例子,例如哺乳动物的生存技能,鲸鱼、人类都属于哺乳动物,有吃、动的行为,并依靠这两项行为生存。代码如下:

(Whale,鲸鱼)

/**
 * 鲸鱼类
 */
public class Whale {
   

    /**
     * 鲸鱼的活动
     */
    public void move(){
   
        System.out.println("鲸鱼在游泳");
    }

    /**
     * 鲸鱼的吃
     */
    public void eat() {
   
        System.out.println("鲸鱼捕食海洋中的小鱼");
    }

    /**
     * 鲸鱼的生存
     */
    public void life() {
   
        move();
        eat();
    }
}

(Human,人类)

/**
 * 人类
 */
public class Human {
   

    /**
     * 人类的活动
     */
    public void move(){
   
        System.out.println("人类在走路");
    }

    /**
     * 人类的吃
     */
    public void eat() {
   
        System.out.println("人类吃饭");
    }

    /**
     * 人类的生存
     */
    public void life() {
   
        move();
        eat();
    }
}

(Client,客户端,模拟流程)

/**
 * 客户端
 */
public class Client {
   
    public static void main(String[] args) {
   
        new Whale().life();
        System.out.println("===========");
        new Human().life();
    }
}

(执行程序)

在这里插入图片描述

模板方式模式

分析上面的代码,可以看到,鲸鱼、人类生存行为都是依赖于吃、动行为的,是模板化的。所以,可以考虑抽取出一个哺乳动物抽象类,类中有吃、动抽象方法,而对于生存行为,则将其模板化,固定搭配,写在一个final修饰的生存方法中。如下:

(Mammal,哺乳动物抽象类,固定生存模板方法)

/**
 * 哺乳动物类
 */
public abstract class Mammal {
   

    /**
     * 哺乳动物的活动
     */
    public abstract void move();
    
    /**
     * 哺乳动物的吃
     */
    public abstract void eat();
    
    /**
     * 哺乳动物的生存
     */
    public final void life() {
   
        move();
        eat();
    }
}

(Whale,鲸鱼,具体实现类)

/**
 * 鲸鱼类
 */
public class Whale extends Mammal{
   

    /**
     * 鲸鱼的活动
     */
    public void move(){
   
        System.out.println("鲸鱼在游泳");
    }

    /**
     * 鲸鱼的吃
     */
    public void eat() {
   
        System.out.println("鲸鱼捕食海洋中的小鱼");
    }
}

(Human,人类,具体实现类)

/**
 * 人类
 */
public class Human extends Mammal{
   

    /**
     * 人类的活动
     */
    public void move(){
   
        System.out.println("人类在走路");
    }

    /**
     * 人类的吃
     */
    public void eat() {
   
        System.out.println("人类吃饭");
    }
}

(Client,客户端,模拟流程)

/**
 * 客户端
 */
public class Client {
   
    public static void main(String[] args) {
   
        new Whale().life();
        System.out.println("===========");
        new Human().life();
    }
}

在这里插入图片描述

通过模板方法模式,将多个对象中行为的固定组合,从对象中抽取出来放到父类中,简化了代码,同时也统一了子类的方法。

总结

本文参考《设计模式的艺术》、《秒懂设计模式》两书,案例代码与书中的略有不同。

相关推荐

  1. 设计模式行为设计模式——模板方法模式

    2023-12-10 10:12:04       16 阅读
  2. 设计模式行为设计模式模板方法模式

    2023-12-10 10:12:04       11 阅读
  3. 设计模式(六):模板方法模式(行为模式)

    2023-12-10 10:12:04       25 阅读
  4. 设计模式(015)行为模板方法模式

    2023-12-10 10:12:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 10:12:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 10:12:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 10:12:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 10:12:04       20 阅读

热门阅读

  1. PipeCone向量数据库

    2023-12-10 10:12:04       35 阅读
  2. 如何使用vue开发vscode插件

    2023-12-10 10:12:04       36 阅读
  3. C++ 教程 - 02 复合数据类型

    2023-12-10 10:12:04       43 阅读
  4. 【力扣100】5.盛水最多的容器

    2023-12-10 10:12:04       46 阅读
  5. lua 脚本按位与运算

    2023-12-10 10:12:04       37 阅读
  6. Go语言 接口型函数

    2023-12-10 10:12:04       42 阅读
  7. 如何在Go中编写包

    2023-12-10 10:12:04       46 阅读
  8. go与ioc

    2023-12-10 10:12:04       33 阅读
  9. 深入学习之anaconda、pytorch、cuda安装

    2023-12-10 10:12:04       40 阅读