当前位置: 萬仟网 > 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

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

相关文章:

  • 代理模式

    代理(Proxy),顾名思义,就是不用自己去做,而是让别人代替你去做。它在程序开发中起到了非常重要的作用,比如传说中的 AOP(面向切面编... [阅读全文]
  • 设计模式之策略模式

    设计模式之策略模式

    概述 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变换独立于使用算法的客户。 涉及到的设计原则 1. 找出应用中可能需... [阅读全文]
  • 23种设计模式+J2EE设计模式学习笔记-初识设计模式

    设计模式简介: 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。(个人理解:设计模式是不关乎业务,逻辑实现,针对普遍问... [阅读全文]
  • 23种设计模式之装饰模式

    23种设计模式之装饰模式

    装饰模式的定义 定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说, 装饰模式相比生成子类更为灵活. 通俗的说, 就是对一个类或方法进行包... [阅读全文]
  • 观察者模式-C#实现

    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式有四个角色:抽象主题、具体主题、... [阅读全文]
  • 状态模式.

    状态模式.

    一、概念 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对... [阅读全文]
  • 设计模式之模板方法(Template Method)

    在整理模板方法之前,先来说点废话吧。除了记录学习总结,也来记录一下生活吧。 我们公司的老板在北京,老板也会因为项目来公司,不过不是天天来。公司有个同... [阅读全文]
  • 设计模式第三篇-装饰者模式

    设计模式第三篇-装饰者模式

    一、引言 先看一个开发问题,很多人都玩过英雄联盟这款游戏:里面有各种英雄,每个英雄都有各自的技能(一般是4个主动技能),每升一级可以升级一个技能,但... [阅读全文]
  • 设计模式之观察者模式(二)

    设计模式之观察者模式(二)

    上一篇的观察者模式学习的还好吗?首先简单来回顾下上篇内容,有一个气象站的需求,需要在温度、湿度、气压改变的时候,实时更新三个布告板,以便能及时、准确... [阅读全文]
  • 浅谈单例

    单例模式 1.个人思路 1.业务需求 统一使用同一个对象(创建的对象为一个 使用的对象是同一个) 2.业务思考 3.实现的方案 2.保证生成的单例唯... [阅读全文]
验证码:
Copyright © 2017-2021  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com