信封问题_装饰信封

信封问题

有时 很多时候,我需要一个类实现通过使其他类的实例的接口。 听起来很奇怪? 让我给你看一个例子。 在Takes框架中有许多此类,它们的名称都都类似于*Wrap 。 不幸的是,这是一个方便的设计概念,在Java中看起来很冗长。 拥有更短的内容会很棒,例如在EO中。

西北偏北(1959年),阿尔弗雷德·希区柯克(Alfred Hitchcock)

看一下Takes Framework中的RsHtml 。 它的设计看起来像这样(只有一个主要构造函数的简化版本):

class RsHtml extends RsWrap {RsHtml(final String text) {super(new RsWithType(new RsWithStatus(text, 200),"text/html"));}
}

现在,让我们看一下它扩展的RsWrap

public class RsWrap implements Response {private final Response origin;public RsWrap(final Response res) {this.origin = res;}@Overridepublic final Iterable<String> head() {return this.origin.head();}@Overridepublic final InputStream body() {return this.origin.body();}
}

如您所见,此“装饰器”除“仅装饰”外不执行任何操作。 它封装了另一个Response ,并通过所有方法调用。

如果还不清楚,我将解释RsHtml的用途。 假设您有文字,并且想创建一个Response

String text = // you have it already
Response response = new RsWithType(new RsWithStatus(text, HttpURLConnection.HTTP_OK),"text/html"
);

您可以使用RsHtml在许多地方一遍又一遍地完成这种装饰器的组合 :

String text = // you have it already
Response response = new RsHtml(text);

这非常方便,但是RsWrap非常冗长。 太多的行没有做任何特别的事情。 他们只是将所有方法调用转发到封装的Response

我们如何引入一个新概念“ decorators”,并使用一个新关键字decorates

class RsHtml decorates Response {RsHtml(final String text) {this(new RsWithType(new RsWithStatus(text, 200),"text/html"))}
}

然后,为了创建一个对象,我们只需调用:

Response response = new RsHtml(text);

装饰器中没有任何新方法,只有构造器。 这些家伙的唯一目的是创建其他对象并封装它们。 它们并不是真正的通用对象。 它们仅帮助我们创建其他对象。

这就是为什么我称它们为“装饰信封”。

这个想法可能看起来与Factory设计模式非常相似,但是它没有静态方法 ,我们试图在面向对象的编程中避免这种方法 。

您可能还会发现这些相关的帖子很有趣: 可组合装饰器与命令式实用工具方法 ; 通过验证装饰器进行防御性编程 ; If-Then-Else是代码气味 ; 垂直和水平装饰 ; 为什么InputStream设计错误 ;

翻译自: https://www.javacodegeeks.com/2017/02/decorating-envelopes.html

信封问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

etf基金代码大全_银行ETF最新规模首超28亿元再创历史新高,近4个月资金净流入超12亿元...

2019年即将收官&#xff0c;A股大盘在12月份总体有了明显的回暖&#xff0c;拥有低估值优势的银行板块随之明显反弹。受此利好行情催化&#xff0c;资金持续涌入银行ETF&#xff0c;其基金份额、基金规模双双连创历史新高。据上交所12月26日公布的最新数据&#xff0c;银行ETF&…

java判断时间是否在时间段内_具有C语言基础,利用半年时间学习Java是否够用

首先&#xff0c;对于具有一定C语言基础的同学来说&#xff0c;利用半年的时间来学习Java会有一个比较系统的学习过程&#xff0c;通常也能够达到实习程序员&#xff0c;或者是助理程序员的水平&#xff0c;然后在技术团队中实践一段时间之后&#xff0c;从事专业开发岗位应该是…

二维动画作品_「咻动画」二维动画制作中角色造型的设计要点

关于二维动画可能就算不是动画行业的小伙伴们都多多少少都有所了解&#xff0c;近年来其在宣传片制作上面越来越受用。不少企业抛开传统保守的宣传片表现形式转而尝试动画制作宣传片&#xff0c;我们都知道在动画制作从脚本策划到输出成片这个过程中是一个很复杂的制作流程&…

c# redis 如何设置过期时间_Redis 过期时间与内存管理

http://www.redis.cn/commands/expire.htmlhttp://www.redis.cn/topics/lru-cache.html内存管理 当 Redis 作为缓存使用时&#xff08;此时缓存仅作为热点数据提高服务的访问性能&#xff09;&#xff0c;需要考虑内存的限制&#xff0c;以及如何随着业务的增长&#xff0c;仅保…

大端字节序码流中取出2字节_产生字节码

大端字节序码流中取出2字节在这篇文章中&#xff0c;我们将看到如何为我们的语言生成字节码。 到目前为止&#xff0c;我们已经看到了如何构建一种语言来表达我们想要的东西&#xff0c;如何验证该语言&#xff0c;如何为该语言构建编辑器&#xff0c;但实际上我们还不能运行代…

python写520_用Python做一个520表白神器,值得收藏

本文最后给出了打包好的软件&#xff0c;无需安装Python环境和各种依赖&#xff0c;直接下载软件&#xff0c;解压后&#xff0c;双击exe文件即可使用。先来看一下具体的效果。运行程序。用Python做一个520表白神器&#xff0c;值得收藏点击「选择图片」 选择JPG/JPGE/PNG三种中…

为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程

老早之前的计算机只有一个处理器&#xff0c;而 一个处理器在同一时刻只能处理一条指令 &#xff0c;换句话说&#xff0c;我们的代码需要一行一行的按顺序被计算机执行&#xff0c;计算机只能把一个程序完整的执行完&#xff0c;然后再执行第二个程序。所以计算机专业的同学们…

不同坐标系下角速度_最伟大的数学发明,坐标系的诞生,是人类史上的方向盘...

【想要了解更多精彩文章、视频&#xff0c;欢迎关注创鹏科学堂】人生最大的意义&#xff0c;莫过于过得更方便&#xff1b;数学最大的意义&#xff0c;莫过于帮助人类过得更方便。几千年来&#xff0c;自从数学出现之后&#xff0c;它就一直以人类生活为导向&#xff0c;以宇宙…

php中的ol标签,html5中ol标签的用法详解

这篇文章主要介绍了详解HTML5中ol标签的用法,是HTML5入门学习中的基础知识,需要的朋友可以参考下定义和用法标签定义有序列表。HTML 4.01 与 HTML 5 之间的差异在 HTML 4.01 中&#xff0c;不赞成使用 "start" 属性&#xff0c;在 HTML 5 中是允许的。在 HTML 4.01 中…

portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

portlet介绍 由于世界仍在Java的掌控之中&#xff0c;因此我们经常定义所谓的基于组件的平台 。 我在2000年拥有OpenUSS&#xff08;开放大学支持系统&#xff09;的经验。 当时我有一个想法&#xff0c;就是开发一个可以使用组件体系结构和J2EE技术​​&#xff08; OpenUSS C…

keil5函数 默认返回值_C++ 函数的定义

“ C对于函数的基本用法”01—函数的定义//函数声明&#xff1a;[返回值类型] [函数名称] (参数列表)int Function(int a, int b);//函数定义int Function(int a, int b){ //函数体 return a b;}02—函数的默认参数定义函数时可以在参数列表中为形参指定默认值int Function2…

已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?

文章目录1. 如何创建ROOT及设置密码2.更改登陆方式&#xff0c;采用ROOT用户登陆a. 编辑EC2实例的ssh登录方式b. 再编辑authorized_keys文件&#xff0c;将ssh-rsa 前面的文字全部删除&#xff0c;确保ssh-rsa没有任何文字&#xff0c;包括空格。3. 重新登陆对于刚创建AWS EC2实…

输入一个正整数求所有素数因子_一起来聊聊素数的两个性质

素数(prime number)&#xff0c;又称质数&#xff0c;有无限个。定义&#xff1a;在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数。来介绍两个简单的性质&#xff1a;质数的个数是无穷的。欧几里得的《几何原本》曾有一经典证明&#xff0c;用的是反证法。当然…

基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...

基于docker微服务架构基于微服务的流架构与开源规则引擎相结合&#xff0c;使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目。 该项目的目标&#xff08;即众所周知的复杂事件处理&#xff08;CEP&#xff0…

php怎样下载网上的文件,php怎样实现文件下载

用head() 和 fread()函数把文件直接输出到浏览器。具体代码&#xff1a;<?php $file_name "down";$file_name "down.zip"; //下载文件名$file_dir "./down/"; //下载文件存放目录//检查文件是否存在if (! file_exists ( $file_dir . $fil…

Windows 系统下,移动硬盘无法识别怎么修复?

方案1&#xff1a;移动硬盘没有驱动器号 有时移动硬盘插入计算机&#xff0c;但无法在我的计算机上显示。此时&#xff0c;可能只是因为移动硬盘没有驱动器号。 右键单击此计算机&#xff08;计算机&#xff09;&#xff0c;然后单击[管理]将其打开。 点击左边的[磁盘管理]&a…

欢乐鼠标自动点击器_使用ESP32 DIY蓝牙自动点击器,滑屏器

前言因为爱薅羊毛&#xff0c;然后正好最近免费车一趟接一趟&#xff0c;咪咕开完&#xff0c;京东开&#xff0c;京东开完掌阅开&#xff0c;下一个不知道是谁&#xff0c;&#xff0c;&#xff0c;&#xff0c;可我又不是什么很有耐心的人&#xff0c;虽然我喜欢看书&#xf…

java单词按字典排序_最终Java日志字典:开发人员最常记录的单词是什么?

java单词按字典排序最终的记录字典&#xff0c;或者&#xff1a;我们记录的最常见单词是什么&#xff1f; 日志文件是调试应用程序的最常用方法&#xff0c;当解决错误时&#xff0c;它们肯定可以引导我们朝正确的方向发展。 但是&#xff0c;大多数日志文件每天都会增加一百万…

winscp使用密钥登录远程linux系统

说明&#xff1a; WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时putty也是一个开源连接ssh的windows客户端&#xff0c;本文介绍puttyWinSCP密钥对登录linux服务器。 1. 创建密钥对 安装openssl yum –y install openssl #openssl一般服务器都会预装 创建密…