首页 > 其他分享 >设计模式之装饰者模式--钢铁侠的形成

设计模式之装饰者模式--钢铁侠的形成

时间:2023-06-12 10:44:34浏览次数:36  
标签:钢铁 -- 模式 public behavior 设计模式 装饰

前言

本文主要讲述java常见设计模式之装饰者模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。

一.什么是装饰者模式

装饰者模式是23种设计模式中结构型模式的一种,它的核心思想是在不必改变类文件及不使用继承的情况下,通过装饰者包裹目标对象,动态地扩展目标对象的功能。

二.生活中的装饰者器模式

1.钢铁侠

托尼斯塔克,漫威著名的超级英雄钢铁侠,钢铁侠最出名的就是他的钢铁战衣,而只有穿戴上钢铁战衣的托尼斯塔克才是钢铁侠,通过钢铁战衣让自己成为钢铁侠,做到一些普通人完成不了的事。这样的钢铁侠就跟设计模式中的装饰者模式类似。
在这里插入图片描述

2.蝙蝠侠

布鲁斯韦恩,DC著名的超级英雄蝙蝠侠,穿上了蝙蝠装的布鲁斯韦恩才是蝙蝠侠,通过蝙蝠装和蝙蝠车这些装备让布鲁斯韦恩变得更加强大,再结合自身强大的格斗能力把哥谭的反派们整得服服帖帖。这样的蝙蝠侠就跟设计模式中的装饰者模式类似。

3.黑豹

穷人靠变异,富人靠科技,而黑豹这个顶级富豪又靠变异又靠科技,打破了这句话。心形草+黑豹装两者结合才是漫威英雄黑豹,而由心形草和黑豹装增强的黑豹就跟设计模式中的装饰者模式类似。

三.装饰者模式的实现

接下来江帅以钢铁侠来举例,通过装饰者模式来实现。首先创建抽象组件人类和具体组件托尼斯塔克类

package com.qianfeng.ran;

/*
 * @author:江帅
 *      抽象组件
 *          人类
 */
public abstract class Human {
    //行为方法
    public abstract void behavior();
}


/*
 * @author:江帅
 *      具体组件类
 *          托尼斯塔克
 */
class TonyStark extends Human{
    //拯救世界的行为
    @Override
    public void behavior() {
        System.out.println("运用科技和财富拯救世界");
    }
}

再创建抽象装饰者超级英雄类和装饰者具体实现类钢铁侠类

package com.qianfeng.ran;

/*
 * @author:江帅
 *      抽象装饰者
 *          超级英雄类
 */
public abstract class Superhero extends Human{
    private Human human;
    //获取被装饰对象
    public Superhero(Human human) {
        this.human = human;
    }

    @Override
    public void behavior() {
        //执行目标对象原本的行为
        human.behavior();
    }
}


/*
 * @author:江帅
 *      具体装饰者类
 *          钢铁侠类
 */
class IronMan extends Superhero {
    public IronMan(Human human) {
        super(human);
    }

    //增强目标对象的行为
    @Override
    public void behavior() {
        super.behavior();
        System.out.println("穿戴钢铁战衣拯救世界");
    }
}

最后通过装饰者模式来模拟没有钢铁战衣的托尼斯塔克和有钢铁战衣的区别

package com.qianfeng.ran;

/*
 * @author:江帅
 *          客户端
 */
public class Demo {
    public static void main(String[] args) {
        //创建托尼斯塔克对象
        TonyStark tonyStark = new TonyStark();
        //执行结果:
        //运用科技和财富拯救世界
        tonyStark.behavior();

        //通过装饰者模式使托尼斯塔克对象装饰成钢铁侠对象
        IronMan ironMan = new IronMan(tonyStark);
        //执行结果:
        //运用科技和财富拯救世界
        //穿戴钢铁战衣拯救世界
        ironMan.behavior();
    }
}

五.总结

使用装饰者模式可以动态地给目标对象添加功能,或者在原有的功能上使之更加强大,而这些功能也能动态的撤销。当不便于使用继承方式增强对象的功能,或者使用继承后不便于扩展和维护,装饰者模式就是一种很好的模式。

在IO流中,包装流使用的就是装饰者模式,例如:BufferedInputStream、BufferedOutputStream、BufferedWriter、BufferedReader等等

下一章,将带大家学习经纪人的工作(设计模式之代理模式)

标签:钢铁,--,模式,public,behavior,设计模式,装饰
From: https://www.cnblogs.com/qian-fen/p/17474300.html

相关文章

  • 龙芯下如何进行.net core程序开发部署
    龙芯LoongArch64已经发布了对.NETCore的支持,相关工具链也已完成,目前支持.NETCore3.1、.NET6、.NET7版本。本文以.NETCore3.1在loongnix-server8.4下部署为例说明开发部署过程。.NETCore3.1是基于上游社区.NETCore3.1-LTS-SDK制作的,同样是LTS版本。1、在龙芯开源社区下载安装.net......
  • 9 Go 函数
    函数是为完成某一功能的程序指令(语句)的集合称为函数。在Go中,函数分为:自定义函数和系统函数。函数的定义以下是函数的基本语法描述:func函数名(形参列表)(返回值类型列表){...语句块return返回值1,返回值2}形参列表表示函数的输入函数中的语句表示为了实现......
  • 0x02 Go 语言中的转译字符
    \t表示一个制表位,实现对齐的功能\n换行符\\表示一个斜杠\\"表示一个半引号"\r表示一个回车,它会将后面的内容覆盖掉前面的内容,例如:"123456789\r456"实际输出为456456789......
  • 二叉搜索二叉搜索树-leetcode-700
    给定二叉搜索树(BST)的根节点root和一个整数值val。你需要在BST中找到节点值等于val的节点。返回以该节点为根的子树。如果节点不存在,则返回null。示例1:输入:root=[4,2,7,1,3],val=2输出:[2,1,3]示例2:输入:root=[4,2,7,1,3],val=5输出:[]提示:数中节点......
  • V8是如何执行JavaScript代码的?
    前言一般来讲,电脑是不能直接运行我们的javascript代码的,它需要一个翻译程序将人类能够理解的编程语言JavaScript,翻译成机器能够理解的机器语言。目前市面上有很多种JavaScript引擎,诸如SpiderMonkey、V8、JavaScriptCore等。而由谷歌开发的开源项目V8是当下使用最广泛的Ja......
  • ABC305
    T1:WaterStation模拟代码实现//C++实现#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; intans=round(n/5.)*5; cout<<ans<<'\n'; return0;}//Python实现n=int(input())ans=int(......
  • idea java项目中,中文显示成Unicode(UTF-16编码)的字符,修改为中文显示
    idea选择File选择Setings搜索框搜索fileencodings勾选Transparentnative-to-asciiconversion      ......
  • 实验六
    实验任务一实验源码:fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)......
  • leangoo领歌Scrum敏捷工具中,如何快速查看项目内所有任务卡片
    ​项目管理员能不能快捷的查看整个项目内的所有任务?能不能快捷查看项目内某一个成员的所有任务?能不能快捷的在项目内通过一些条件选择查看任务?可以导出项目内某一个人的所有任务吗?方便做一些统计等等...这些现在Leangoo领歌敏捷管理工具中都可以实现啦~查看项目内所有任务进......
  • CentOS 安装PostgreSQL 9.1
    PostgreSQL通常也简称Postgres,是一个关系型数据库管理系统,适用于各种Linux操作系统、Windows、Solaris、BSD和MacOSX。PostgreSQL遵循PostgreSQL许可,是一个开源软件。PostgreSQL由PostgreSQL全球开发组开发,由极少数的公司志愿组成并进行监督管理,这些公司有红帽、EnterpriseDB等......