java 模式之修饰模式

修饰模式

作用:动态的在对象上增加功能。虽然同样的功能也可以通过子类来实现,但是用修饰模式效果要好。

例子:获取留言版上某个用户的留言信息。

public interface MessageBoardHandler { public String filter(String message); }


 

获取信息的实现类:MessageBoard

public class MessageBoard implements MessageBoardHandler { public String filter(String message) { return "message:"+message; } }


 

然后,由于业务需要,得将信息里有关Html标签的内容和不和谐的内容去掉。正常情况下我们有两种做法(1)修改MessageBoard类,但是可能还会有些地方不需要这两种过滤条件(2)通过新增子类,可是呢多个过滤条件得新增多个子类,而且如果还需要考滤过滤次序的问题话,子类的数目就会以几何级的基数暴长。呵呵。

所以,还得用修饰模式:

1)        抽象构件角色(Component):定义一个抽象接口,以规范准备接收附加责任的对象。

2)        具体构件角色(Concrete Component):这是被装饰者,定义一个将要被装饰增加功能的类。

3)        装饰角色(Decorator):持有一个构件对象的实例,并定义了抽象构件定义的接口。

4)        具体装饰角色(Concrete Decorator):负责给构件添加增加的功能。

/** * @author leno 装饰角色 */ public class MessageBoardDecorator implements MessageBoardHandler { private MessageBoardHandler handler; public MessageBoardDecorator(MessageBoardHandler handler) { super(); this.handler = handler; } public String filter(String msg) { return handler.filter(msg); } }


 

/** * @author leno 具体装饰角色,增加过滤掉HTML标签的功能 */ public class HtmlFilter extends MessageBoardDecorator { public HtmlFilter(MessageBoardHandler handler) { super(handler); } public String filter(String content) { String temp = super.filter(content); temp += "^^过滤掉HTML标签!^^"; return temp; } }


 

/** * @author leno 具体装饰角色,增加过滤掉政治敏感字眼的功能 */ public class SensitiveFilter extends MessageBoardDecorator { public SensitiveFilter(MessageBoardHandler handler) { super(handler); } public String filter(String content) { String temp = super.filter(content); temp += "^^过滤掉政治敏感的字眼!^^"; return temp; } }


 

public class Test { public static void main(String[] args) { MessageBoardHandler mb = new MessageBoard(); String content = mb.filter("一定要学好装饰模式!"); System.out.println(content); mb = new HtmlFilter(new SensitiveFilter(new MessageBoard())); content = mb.filter("一定要学好装饰模式!"); System.out.println(content); }


 

 

 

Java单例模式 双重校验锁 为啥要用volatile修饰 public class Single { private static volatile Single single; public static Single getSingle(){ if (single==null){ synchronized (Single.class){ if (single==null){ single=new Single(); } } } return null; } } 因为如果不用volatile修饰的话,在 single=new Sing. 阅读详情

相关推荐

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

Java中的代理模式和装饰者模式

1. 代理模式的原理 使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 举一个简单的例子,比如一个生产羽绒服的工厂,生产羽绒服,生产完成之后就直接对消费者进行出售,虽然这款羽绒服可以保暖,但是现在人们的要求变高了要求羽绒服不但保暖还要好看,连包装都要好看。怎么办了这个羽绒服工厂只能生产羽绒服,不懂怎么包装美化。后来慢慢的有一些人看到了商机,就是做这个羽绒服的代理商,这个代理商有设备对羽绒服进行包装美化。这个代理商的

Code_Boy_Code的博客 2945

从爆仓到流畅发货:我们如何用EIQ分析给跨境小电商仓库做了一次‘体检’与‘手术’

本文分享了如何通过EIQ分析工具为跨境小电商仓库进行诊断与优化,从爆仓危机到流畅发货的实战经验。通过ABC分类法、动态路径算法等策略,拣货效率提升40%,错发率降低91%,日均处理能力翻倍。文章为小电商提供了轻量级工具选择和关键指标监控的实用建议。

weixin_28707739的博客 397

Java IO类——修饰器模式

修饰器模式——一种典型的设计模式,在不影响现有对象的功能的基础上,动态地给该对象增加一些功能。

weixin_44637060的博客 594

Materials studio中的简单聚合物的建立及盒子的弛豫

涉及模块 Amorphous Cell-construction Forcite-caculation Build Polymers-Homopolymer

快乐学术猿 3万+

408王道考研【数据结构】思维导图(章节详细可下载xmind文件)

由于图片太多,不一一放上来了,还有部分章节【查找、排序、B树B+树等】在百度网盘,可以关注我的公众号领取【完整的图片+xmind文件】,如想要获取xmind文件的同学可以关注我的个人公众号“小柒很爱喵”,回复“数据结构导图”,可获得以上导图原图和xmind文件(可修改导图内容、查看导图隐藏的笔记与备注,即上图带杠杠的地方是我进一步助于理解的解释)。 希望对你们...

weixin_41950078的博客 7989

Java设计模式-结构型-修饰模式

什么是修饰模式 修饰模式是面向对象模式的一种,该模式可以动态向类中添加新的功能。动态指的是在程序运行时候,而我们常用的扩展功能的方法是写一个子类继承父类,这样的继承是静态的,因为这样的扩展方法是程序编译时候就体现出来了。 在上图中可以看到,接口类Component有2个实现,ConcreteComponent类和Decorator类,Decorator类和它的2个子类对Conc...

2587

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3272

java设计模式之修饰

在IO流的学习中,我们使用到了装饰者的设计模式。现在就详细的学习一下java的装饰者设计模式。 Java的装饰者模式就是 java程序在运行时可以动态扩大一个类的功能。 它的原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。 修

niuhongbin的专栏 561

30天入门 SAP BTP 开发系列之一:SAP 开发顾问为什么要学习 SAP BTP 开发?能带来哪些收获?

国内 SAP 开发顾问们的微信朋友圈,最近可能都被 SAP 和阿里这两家巨头宣布合作的重磅消息刷屏了吧。近日,德国软件巨头SAP SE与中国电商巨头阿里巴巴集团宣布建立战略合作伙伴关系。根据协议,阿里巴巴集团将利用 SAP Cloud ERP Private 强化企业基础设施,并采用联合上市策略为全球客户创造卓越价值。阿里巴巴将集成 SAP Business Suite,以简化系统维护与升级流程,并实现 AI 功能与核心业务流程的无缝整合。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2382

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2120

python类里面装饰器_在Python类中如何定义和使用装饰器?

是这样的,我封装了一个类,然后许多类中的方法要加一些相同的功能(这些功能都是基于这个类的),我知道装饰器能简化这个过程,但google了许多,没有发现在类中如何实现装饰器.比如:class Test(object):self.i = 1def fun(self):print 'hehe'我想要在一些方法前加入特定改变self.i的方法并把参数传进去,类似这样:def decorator(self,...

weixin_39617044的博客 216

数据分片的三种方式:哈希、一致性哈希、按照数据范围分片

数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。三种常用的数据分片方式:1. 哈希分片2. 一致性哈希分片(Consistent Hash)3. 按照数据范围分片(Range Based)数据分片的应用场景:1. 数据库扩展2. 分布式缓存对集群部署多个缓存节点,提高缓存的处理能力。

wjianwei666的专栏 1135

Java设计模式—单例模式以及权限修饰符

什么是设计模式? 对问题行之有效地解决方式,其实他是一种设计思想。 1.  单例设计模式: 解决问题:保证一个类在内存中的对象是唯一的。    如何保证对象的唯一性? 1.  不允许其他程序用new关键字来创建对象。 2.  在该类中创建一个本类的实例。 3.  定义一个公有的方法,让其他程序可以获取该对象。   步骤: 1.  私有化构造方法。 2.  2.通过new在

zq771793683的博客 2430

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

修饰者模式在java文件处理流中的运用

介绍一下修饰者模式在java文件处理流中的运用

yxlhhhh_的博客 1945

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java类库中的 设计模式_Java类库中的设计模式之修饰器(Decorator)

在java.io包中使用。看如下这行代码:output = new ObjectOutputSteam(new FileOutputStream(filename));上面这行代码使得一个ObjectOutputStream对象(此对象向一个文件写对象)可以获得FileOutputStream对象(此对象提供向文件写字节的方法)的职责。ObjectOutputStream对象可以动态地获得File...

weixin_42165973的博客 166

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java基础之修饰符,单例设计模式

1,类修饰符:public:可在任何地方被访问 abstract:不能被实例化(不一定有抽象方法,如果有抽象方法一定是抽象类) final:不能被继承,即不能有子类(被final修饰的类不能被继承,方法不能被重写,变量必须赋初值且不能被改变。2,方法修饰符:public:任何地方protected:能被子类访问,不论子类是否和父类在同一包内,同一包内可访问,不同包内非子类不能访问(即使是该类对...

196

Java中的final,static修饰符和单例模式的引入

目录Java中的修饰符分为权限修饰符和特征修饰符权限修饰符特征修饰符1.final2.static Java中的修饰符分为权限修饰符和特征修饰符 权限修饰符 意义 public 公共的 protected 受保护的 默认不写 默认的 private 私有的 特征修饰符 意义 final 最终的 不可更改的 static 静态的 abstract 抽象的 native 本地的 transient 瞬时的 短暂的------>序列化

big_C的博客 590

java-06 权限的修饰符以及单例模式

一.public private protected friendly 四种修饰符的作用域 当前类 同一个包下的类    子孙类 其他包下的类 public  OK OK OK OK protected OK OK OK NO friendly OK OK NO NO private OK NO NO NO ***********以上修饰符可以用来修饰什么

青衫-优快云博客 702

JAVA权限修饰符、单例设计模式

本文介绍了Java中的四种权限修饰符(private、缺省、protected、public)及其作用范围:private仅限本类访问,缺省允许同包访问,protected允许子类访问,public完全开放。通过代码示例展示了不同场景下的访问权限限制。此外,文章还讲解了单例设计模式的两种实现方式:饿汉式(提前创建实例,线程安全但可能浪费内存)和懒汉式(延迟创建实例,节省内存但多线程下可能不安全)。两种方式都通过私有构造、静态实例和公共获取方法实现单例特性。

2402_86604855的博客 726

java 16:可见性修饰符及单例模式

可见性修饰是用来修饰数据域跟

dymom的专栏 1252

修饰模式java_Java设计模式之修饰模式篇(4)

在进行排序的时候,排序修饰者并没有改变它修饰的真实对象,而是通过了一个数组来保存列的位置。当其他对象向它请求特定行和列的数据的时候,它通过行的值作为数组的索引并返回数组中相应位置的值。通过这种方式,排序修饰者在不改变表结构的前题下将排序功能叠加到了表结构上。TableSortDecorator同时还实现了TableModelListener接口并将自己注册为一个监听者。当真实对象,也就是原有的表对...

weixin_29144347的博客 146

Java访问修饰符与单例模式

/** * public:允许在任意位置访问。 * private:只允许在本类内进行访问 * protected:允许在当前类内访问、同包子类/非子类、夸包子类调用,夸包非子类不允许。 * 默认:允许在当前类、同包子类/非子类调用、夸包子类/非子类都不允许。 */ ...

林中明月间丶 190

java四种修饰符的限制范围、类的加载顺序(附带设计模式分类)

java四种修饰符的限制范围、类的加载顺序(附带设计模式分类) 目录java四种修饰符的限制范围、类的加载顺序(附带设计模式分类)一、java四种修饰符的限制范围二、设计模式分类三、类的加载顺序 一、java四种修饰符的限制范围 访问权限 本类 本包 不同包子类 不同包非子类 public √ √ √ √ protected √ √ √ default √ √ p...

qq1026432050的博客 1525

Java类库中的设计模式之修饰器(Decorator)

在java.io包中使用。看如下这行代码:output = new ObjectOutputSteam(new FileOutputStream(filename));上面这行代码使得一个ObjectOutputStream对象(此对象向一个文件写对象)可以获得FileOutputStream对象(此对象提供向文件写字节的方法)的职责。ObjectOutputStream对象可以动态地获...

weixin_33795093的博客 232

JAVA简单工厂模式,JAVAfinal关键字修饰与效用详解

一.简单工厂模式:是解决大量创建对象的的方案. 以static方法和对new关键字的隐藏,实现通过一个简单的字符串实现获取对象的方案. public class Computer { @Override public String toString() { return "我是一个电脑"; } } public class IntelComputer extends Computer{ @Override public String...

weixin_44538849的博客 229
上一篇: oracle导入导出命令详解
下一篇: oracle 常见错误
ghostjohn
博客等级 码龄20年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值