制作程序化装饰花纹图案_装饰图案

制作程序化装饰花纹图案

装饰图案

装饰 我不经常使用的一种设计模式是Decorator 。 我不确定为什么这种模式不受欢迎,因为它很方便。 装饰器模式允许以受控方式向对象添加功能。 即使在使用静态类型的语言时,也可以在运行时运行! 装饰器模式是子类的替代方法。 子类化会在编译时添加行为,并且更改会影响原始类的所有实例; 装饰可以在运行时为单个对象提供新的行为。 装饰器模式是遵守开放/关闭原则的好工具。

一些示例可能显示此模式的价值:

示例1:HTTP身份验证

想象一下一个HTTP客户端,例如与RESTful服务对话的客户端。

该服务的某些部分可公开访问,但某些部分需要用户登录。当客户端尝试访问受保护的资源时,RESTful服务以401 Unauthorized状态码响应。

更改客户端以处理401会导致重复,因为每个调用都可能需要身份验证 。 因此,我们应该将身份验证代码提取到一个位置。 但是那个地方在哪里?

这是Decorator模式出现的地方:

public class AuthenticatingHttpClientimplements HttpClient {private final HttpClient wrapped;public AuthenticatingHttpClient(HttpClient wrapped) {this.wrapped = wrapped;}@Overridepublic Response execute(Request request) {Response response = wrapped.execute(request);if (response.getStatusCode() == 401) {authenticate();response = wrapped.execute(request);}return response;}protected void authenticate() {// ...}}

REST客户端现在不再需要担心身份验证,因为AuthenticatingHttpClient处理AuthenticatingHttpClient

示例2:缓存授权决策

OK,因此用户已登录,REST服务器知道她的身份。 它可能决定允许一个人访问某个资源,但不允许另一个人访问。

IOW,它可能使用XACML来实现授权 。 在这种情况下, 策略决策点 (PDP)负责决定访问请求。

检查权限通常很昂贵,尤其是当权限变得更细粒度并且访问策略更加复杂时。 由于访问策略通常不会经常更改,因此这是缓存的理想选择。

这是装饰器模式可能派上用场的另一个实例:

public class CachingPdp implements Pdp {private final Pdp wrapped;public CachingPdp(Pdp wrapped) {this.wrapped = wrapped;}@Overridepublic ResponseContext decide(RequestContext request) {ResponseContext response = getCached(request);if (response == null) {response = wrapped.decide(request);cache(request, response);}return response;}protected ResponseContext getCached(RequestContext request) {// ...}protected void cache(RequestContext request, ResponseContext response) {// ...}}

如您所见,代码与第一个示例非常相似,这就是为什么我们将其称为模式。

正如您可能从这两个示例中猜到的那样,Decorator模式对于实现跨领域的关注点确实非常有用,例如身份验证,授权和审计的安全功能,但这肯定不是唯一的亮点。

如果您仔细看,我相信您将能够发现更多使这种模式起作用的机会。

参考: 安全软件开发博客中来自JCG合作伙伴 Remon Sinnema 的Decorator Pattern 。

翻译自: https://www.javacodegeeks.com/2014/01/the-decorator-pattern.html

制作程序化装饰花纹图案

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

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

相关文章

[渝粤题库]西北工业大学电力系统自动装置

电力系统自动装置 一. 单选题 (共21题,共42分) 发电机调速系统的失灵区( )。 (2分) A.越大越好 B.越小越好 C.要合适同步发电机无功调节特性特性下倾,对应的调差系数( )…

game,match,competition,contest区别

【1】game: 指决定胜负的比赛,游戏,通常有一定的规则,参加者必须遵守,且多以个人对抗或集体对抗形式根据一定的规则进行的比赛。 【2】match: 多指重要的,参加队数较多的大型体育运动项目比赛&…

[渝粤题库]西北工业大学经济数学(上) (1)

经济数学(上) 1.( ). C. 答案:C 2.极限等于( ). A.0 答案:A 3.已知,当( )时,为无穷小量. A. 答案:A 4.( ). C. 答案:C 5.&#xff08…

[渝粤题库]西北工业大学高等数学(上)

高等数学(上) 当时,与比较是( 非等价的同阶无穷小量 ). 当时,与等价的无穷小量是( ). 10、当x→0时,下面无穷小量中与x等价的无穷小量为( sin x )…

assure, ensure, insure, guarantee的区别

assure, ensure, insure, guarantee都含有一定的"保证"之意 assure 表示向某人保证某事一定会发生(内含有让某人放心之意,以消除疑虑) assure sb. of sth /assure sb. that… He assured us of his ability to solve the problem.他向我们保…

6个您需要了解的日志管理工具(以及如何使用它们)

如果没有正确的工具来汇总和解析日志数据,则几乎不可能找到并了解您正在寻找的信息。 日志有无穷无尽的用途,因为日志本身是无止境的。 应用程序日志,安全日志,BI日志, 林肯日志 (好吧,也许不是…

【渝粤题库】国家开放大学2021春2444酒店管理概论答案

试卷代号:2444 2 0 2 1年春季学期期末统一考试 酒店管理概论试题答案及评分标准 (供参考) 2021年7月 一、单项选择题(在备选答案中,有1个正确答案,请将正确答案的字母填在括号内,每小题2分&…

学术英语:关于such as, for example, etc., and so on, i.e., 和e.g.的使用

英语写作里会遇到需要列举的时候,常用的方式和使用的表达有such as,for example,etc.等等。在这里,我想介绍的是如何正确使用这些表达。 such as… 和 for example… 都表示“例如”的意思,即提示下面将会举例子&…

【渝粤题库】国家开放大学2021春2608中级财务会计(二)题目

试卷代号:2608 2021年春季学期期末统一考试 中级财务会计(二) 试题 2021年7月 一、单项选择题(从下列每小题的四个选项中选择一个正确的,将其序号填入题后的括号里。每小题3分.共30分) 1.商业承兑汇票到期无…

【渝粤题库】国家开放大学2021春2726畜禽生产概论题目

试卷代号:2726 2021年春季学期期末统一考试 畜禽生产概论 试题 2021年7月 一、单项选择题(将你认为正确答案前的字母填在括号内。每小题3分,共45分) 1.仔猪生后( )日龄前主要靠母乳供给营养。 A.20 B.30 C.40 D.50 2.初生仔猪需要…

英文邮件常用句子(工作场景)

「开头打招呼」:一般用hello/hi就行了,dear比较正式,显得不亲近。 Dear all 「自我介绍」 My name is xxx and I’m the 职位 of 公司. 「表明目的」 I am writing to confirm/enquire/inform you … 我写邮件是要确认/询问/通知你 「表示对来…

【渝粤题库】国家开放大学2021春2772家畜环境卫生与设施题目

试卷代号:2772 2021年春季学期期末统一考试 家畜环境卫生与设施 试题 2021年7月 一、单项选择题(每小题3分,共30分) 1.环境温度适宜时,机体的蒸发散热量约占总散热量的( )。 A.17% B.20% C.25% D.30% 2.机体散热使得环…

JDK 12开关表达式遇到意外的枚举值

正如我在“ 玩JDK 12的Switch表达式 ”一文中所写的那样, JDK 12 Early Access Build使JEP 325的实现(“ Switch Expressions(Preview)”)的实验变得容易。 我的帖子“ JDK 12:实际中的切换语句/表达式 ”使…

【渝粤题库】国家开放大学2021春3897商务英语1题目

试卷代号:3897 2021年春季学期期末统一考试 商务英语1 试题 2021年7月 注 意 事 项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考.试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收…

【渝粤题库】国家开放大学2021春3983品牌管理题目

试卷代号: 3983 2021年春季学期期末统一考试 品牌管理 试题 2021年7月 一、单项选择题(在各题的备选答案中,只有1项是正确的,请将正确答案的序号填写在题中的括号内,每个小题2分,共20分) 1.帮助…

【渝粤题库】广东开放大学 基础写作 形成性考核

选择题 题目:写作客体的( ),决定了写作材料是写作活动的物质基础,决定了选材要真实、确凿。 题目:对想象能力表述错误的一项是:( )。 题目:写作主体理…

Matlab画图线型、符号及颜色设置

1. matlab 中线条的主要属性 Color: 颜色LineStyle: 线型LineWidth: 线宽Marker: 标记点的形状MarkerFaceColor: 标记点填充颜色MarkerEdgeColor: 标记点边缘颜色MarkerSize: 标记点大小 2. 各种属性的名称 2.1 线型 -Solid line (default) – Dashed line : Dotted line …

【渝粤题库】广东开放大学 社会保障法 形成性考核

选择题 题目:社会保障法是调整社会保障关系的法律规范的总称,包括社会保障基本法律、有关社会保障的其他法律和行政法规,以及具有法律效力的有关社会保障的地方性法规和各级政府规章 题目:社会保障法的主体是由社会保障法认可或者…

休眠面试问答-最终清单

这是有关Hibernate Framework的一些最重要问题的摘要,可能会要求您在访谈中回答! 您无需担心下一次面试的机会,因为Java Code Geeks在这里为您服务! 您可能会被问到的大多数事情都收集在下面的列表中。 我们的Hibernate面试问题将…

matlab 进度条/waitbar 显示运行进度

当运行大程序,需要跑大量数据的时候,使用进度条可以看到程序究竟运行到什么地方了,哈哈,要不干等着难受(╯﹏╰)…… waitbar的作用是打开或者更新进度条。 1 语法结构 (1.1) h waitbar(x,‘message’) x表示进度条的比例长度…