当前位置: 萬仟网 > IT编程>软件设计>设计模式 > 设计模式之模板方法模式(Template Method)

设计模式之模板方法模式(Template Method)

2021年01月06日  | 萬仟网IT编程  | 我要评论
父类中定义处理流程的框架,在子类中实现具体处理

1.介绍

将具体处理交给子类
在这里插入图片描述

  • 定义:
    定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现
    模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤

  • 类型:
    行为性

  • 适用场景:
    一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现
    各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复

  • 优点:
    提高复用性
    提高扩展性
    符合开闭原则

  • 缺点:
    类数目增加
    增加了系统实现的复杂度
    继承关系自身缺点,如果父类添加新的抽象方法,所有的类都要改一遍

案例场景

  • 将字符串和字符循环打印5次

类和接口一览表

在这里插入图片描述

名字说明
AbstractDisplay只实现display方法的抽象类
CharDisplay实现了open,print,close方法的类
StringDisplay实现了open,print,close方法的类
Main测试程序行为的类

AbstractDisplay类

定义抽象方法:open,print,close 由子类实现,display方法定义方法的模板

public abstract class AbstractDisplay {
    public abstract void open();

    public abstract void close();

    public abstract void print();

    public final void display() {
        open();
        for (int i = 0; i < 5; i++) {
            print();
        }
        close();
    }
}

CharDisplay 类

实现AbstractDisplay类中的抽象方法,自定义方法行为

public class CharDisplay extends AbstractDisplay {

    private char c;

    public CharDisplay(char c) {
        this.c = c;
    }

    @Override
    public void open() {
        System.out.print("<<");
    }

    @Override
    public void close() {
        System.out.print(">>");
        System.out.println("");
    }

    @Override
    public void print() {
        System.out.print(c);
    }
}

StringDisplay 类

实现AbstractDisplay类中的抽象方法,自定义方法行为

public class StringDisplay extends AbstractDisplay {

    private String str;

    public StringDisplay(String str) {
        this.str = str;
    }

    @Override
    public void open() {
        printLint();
    }

    @Override
    public void close() {
        printLint();
    }

    @Override
    public void print() {
        System.out.println("|" + str + "|");
    }

    private void printLint() {
        System.out.print("+");
        for (int i = 0; i < str.length(); i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}

main类

public class Main {

    public static void main(String[] args) {
        AbstractDisplay ad1 = new CharDisplay('a');
        AbstractDisplay ad2 = new StringDisplay("hello world");

        ad1.display();
        ad2.display();
    }
}
  • 执行结果:
<<aaaaa>>
+-----------+
|hello world|
|hello world|
|hello world|
|hello world|
|hello world|
+-----------+	

本文地址:https://blog.csdn.net/cen50958/article/details/112296207

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 结构型模式:适配器模式

    结构型模式:适配器模式

    文章首发: "结构型模式:适配器模式" 七大结构型模式之一:适配器模式。 简介 姓名 :适配器模式 英文名 :Adapter Pattern 价值观... [阅读全文]
  • 第一式 策略模式

    第一式 策略模式

    策略模式 一 开发模拟鸭子游戏 已经有一个很成功的鸭子模拟游戏,里面有各种鸭子,一边游泳,一边呱呱叫。该系统采用的标准OO技术,设计了一个鸭子超类,... [阅读全文]
  • 设计模式六大原则:单一职责原则

    单一职责原则: 对象不应承担太多功能,正如一心不能而用,比如太多的工作(种类)会使人崩溃。唯有专注才能保证对象的高内聚;唯有唯一,才能保证对象的细粒... [阅读全文]
  • Djiango初识

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片 等。因此在 DTL 中加载静态文... [阅读全文]
  • Yii2设计模式——单例模式

    Yii使用单例的场景非常多,比如请求开始创建的Application,Yii,Request,Response等对象功能都十分丰富且开销也很大,维持... [阅读全文]
  • 2018最新iOS端界面UI设计规范整理

    2018最新iOS端界面UI设计规范整理

    在iPhone 6还没出的时候,都是用640×1136 px来做设计稿的,自从6的发布,所有的设计稿尺寸以750×1334 px... [阅读全文]
  • 图解Java设计模式之外观模式

    图解Java设计模式之外观模式

    图解Java设计模式之外观模式 影院管理项目 传统方式解决影院管理 传统方式解决影院管理问题分析 外观模式基本介绍 外观模式原理类图 外观模式解决影院管... [阅读全文]
  • Provider模式应用demo

    参考ObjectPool对象池设计原理还原一个简易的Provider模式。 存储对象的数组ObjectWrapper内元素的取、还操作通过Inter... [阅读全文]
  • 简单工厂、工厂方法和抽象工厂的总结

    简单工厂、工厂方法和抽象工厂的总结

    首先,放上项目github地址: https://github.com/codethereforam/java design patterns, 我... [阅读全文]
  • 面试重点:设计模式(二)——创建模式

    面试重点:设计模式(二)——创建模式

    1.创建模式:简单工厂 单例模式: ArticleDao接口: public interface ArticleDao { public void ... [阅读全文]
验证码:
Copyright © 2017-2021  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com