42、Java装饰者设计模式
设计模式简介
什么是设计模式?
设计模式是可以重复利用的解决方案。软件开发的先驱或者前辈们将之前在开发中遇到的问题进行总结并给出了解决方案,后辈在遇到这些问题之后直接使用这些方案即可解决问题。比如盖高楼,都是先挖地基,然后再盖,如果先盖楼后挖地基,可能盖不了几层,楼就倒了。
装饰者设计模式
使用场景:
给某个对象的功能进行扩展时,可以考虑使用装饰者设计模式。
在IO流这部分内容中,JDK的源码使用了大量的装饰者设计模式。比如BufferedReader可以对FileReader进行装饰。
以去拉面馆吃拉面为例,一碗面做好后都会向里面加料装饰,所以先定义一个装饰拉面的接口,提供一个加料的方法:
package design; public class test_1 {
public interface NoodleDecorate{ //向拉面中加料
void addThings();
}
}
创建一个拉面(Noodle)类实现NoodleDecorate接口
package design; public class Noodle implements NoodleDecorate{ //普通拉面做好后,会向里面添加一些东西
@Override
public void addThings() {
System.out.println("加两片肉");
System.out.println("加一根胡萝卜");
System.out.println("加三片香菜");
}
}
普通的拉面做好之后,有人爱吃辣椒,想在拉面中添加辣椒,创建一个辣椒拉面(ChiliNoodle)类
package design; public class ChiliNoodle implements NoodleDecorate {
//普通拉面
private Noodle noodle; public ChiliNoodle(Noodle noodle) {
this.noodle = noodle;
} @Override
public void addThings() {
//普通拉面
noodle.addThings();
//在普通拉面中添加辣椒
System.out.println("贾三韶辣椒"); }
}
}
测试一下:
在实际生活中你去拉面馆点了一碗拉面,做好之后如果你爱吃辣椒的话可以向里面加点辣椒,而不是让厨师重新做一碗辣椒拉面。
装饰者设计模式的优点:
不用修改被装饰对象的源码,装饰者与被装饰者耦合度不高。
42、Java装饰者设计模式的更多相关文章
- 11 IO流(八)——装饰器设计模式,Filter装饰流
声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html java装饰器设计模式 举一个形象的例子,人可以说话,而扩音器可 ...
- 装饰器设计模式初探及Java中实际应用举例
本篇随笔主要介绍用Java实现简单的装饰器设计模式: 先来看一下装饰器设计模式的类图: 从图中可以看到,我们可以装饰Component接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可 ...
- (java)从零开始之--装饰者设计模式
装饰者设计模式:简单定义:增强一个类的功能,而且还可以让这些装饰类互相装饰. 应用场景:当要在某个功能的基础上扩充功能,并且扩充的功能具有大量排列组合,通过继承关系会衍生出大量子类,这时候用装饰者模式 ...
- 用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题
post的乱码问题比较好解决,这里主要是对get请求的乱码做处理 解决思路:增强request对象的getParameter方法,使之 getParameter 直接获取到的就是解决乱码后的数据 有 ...
- 设计模式--装饰者设计模式(Decorator)
装饰者模式又叫包装模式. 通过另一个对象来扩展自己的行为,在不破坏类的封装的情况下,实现松耦合,易扩展的效果. 抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口可以给这些对象动态地添加职责 ...
- Java江湖之设计模式
Java江湖之设计模式 ps:最近在学习设计模式,感觉这个是个装逼神器呀,就跟武功一样. 某日,senior同学看见rookie同学在练功. 问,"你练得什么武功?" ...
- Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式
输出字符流 Writer 所有输出字符流的基类, 抽象类. FileWriter 向文件输出字符数据的输出字符流. BufferedWriter 缓冲输出字符流 缓冲输出字符流作用: ...
- JAVA装饰者模式(从现实生活角度理解代码原理)
装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职 ...
- java装饰者模式理解
java 装饰者模式其实就是扩展子类的功能,和继承是一个性质. 但继承是在编译时就固定扩展了父类的一些功能,而装饰者模式是在运行过程中动态绑定对象,实现一个子类可以随时扩展功能. 将方法排列组合,也可 ...
随机推荐
- [cnbeta] 波音系列飞机价格。。。
https://www.cnbeta.com/articles/tech/786745.htm 单价最便宜的是波音737-700,为0.858亿美元(约合5.96亿元). 评论网友调侃,“你家能满40 ...
- elasticsearch6 学习之安装
安装环境:centos6.5 64位 jdk1.8 elasticsearch6.1.1 一.启动 [root@localhost bin]# ./elasticsearch - ...
- UVALive3713_Astronauts
有n个宇航员,根据年龄限制,所有宇航员只能从事A或B中的一种任务,所有人都可以从事C的任务.有的宇航员之间相互讨厌,不能分在一组,求出一种满足条件的分配方案. 2sat.mark[]中i+i和i+i+ ...
- QString,string,char* 在utf8和gbk不同编码下的相互转化
关于编码简介:ascii编码是最开始的编码规则本,里面只收纳了英文.特殊字符.数字等有限字符,采用的是8位一个字节的方式进行编码对照:unicode在ascii码的基础上进行了升级扩展,立志将全世界所 ...
- P2303 [SDOi2012]Longge的问题
题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入输出格式 输入格式: 一 ...
- python爬虫实战之bilibili弹幕生成云图
突然想到了这个题目,先开了题,看能不能一次搞定,#后记,花了两天时间搞定的,一直想用自己的方法爬,但是效果都不好 首先去分析一下bilibili的网站请求,但是弹幕的异步传输的包抓不到(或者隐藏的好, ...
- BZOJ 4520: [Cqoi2016]K远点对
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 638 Solved: 340[Submit][Status ...
- Counting
Description 数学老师走啦,英语老师来上课啦 他的性格与众不同,又因为大家都是理科班的学生 他希望大家在数字母的过程中领悟英语的快乐 他用m种字母进行排列组合, 得到了所 ...
- logstash5生成init脚本后台启动
默认情况使用rpm包安装完logstash之后没有启动脚本,这一点我觉得算是开发不够彻底.官网给了一个脚本,需要根据不同的系统版本生成对应的启动脚本,而且官网没有给明使用方法,对于新用户来说算是个坑, ...
- Android Studio 使用VCS版本控制
1.SVN的配置: 如果项目使用的是SVN配置,那么除了乌龟SVN GUI工具外,你还得下载Subversion, 因为AS要用其中的xx.exe命令行执行程序, 下载地址:https://www.v ...