java装饰者模式

来源:互联网 发布:王小波与李银河 知乎 编辑:程序博客网 时间:2024/06/07 23:05

1. 什么是装饰者模式?

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。


2.装饰者模式的类图



3. 为何装饰者和被装饰者有相同的“接口”?

因为装饰者必须能够取代被装饰者


 例子:

jdk中的io是众所周知的装饰者模式,此处编写自己的java i/o 装饰者 把输入流内的所有大写字符转换成小写


package decorator_io;import java.io.FilterInputStream;import java.io.IOException;import java.io.InputStream;/** * 编写自己的java i/o 装饰者 把输入流内的所有大写字符转换成小写 *  * @author chenhong *  *  * */public class LowerCaseInputStream extends FilterInputStream {protected LowerCaseInputStream(InputStream in) {super(in);// TODO Auto-generated constructor stub}/** * 读取单个字符 *  * */public int read() throws IOException {int c = super.read();return c == -1 ? c : Character.toLowerCase(c);}/** * 读取字符数组 * */public int read(byte[] b, int offset, int len) throws IOException {int result = super.read(b, offset, len);for (int i = offset; i < offset + result; ++i) {b[i] = (byte) Character.toLowerCase(b[i]);}return result;}}

package decorator_io;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class Test {public static void main(String[] args) {int c;try {InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("src/decorator_io/Test.java")));while ((c = in.read()) > 0) {System.out.print((char) c);}} catch (IOException e) {e.printStackTrace();}}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 锁的保险坏了怎么办 鞋子里面长霉了怎么办 塑料瓶盖滑丝了怎么办? 塑料杯盖滑丝了怎么办 洗衣机上的订子很难扭出来怎么办 滚筒洗衣机坏了打不开门怎么办 海尔滚筒洗衣机打不开门怎么办 格兰仕滚筒洗衣机门打不开怎么办? lg洗衣机洗完衣服门打不开怎么办 lg洗衣机不能冼衣服怎么办 vivo账户密码忘记了怎么办 oppo账户密码忘记了怎么办 74160从1开始计数怎么办 微信录音声音小怎么办 word文档已停止工作怎么办 怀孕30天不想要怎么办 一楼墙体起碱怎么办 农村平房顶四墙面渗水怎么办 被蝎子精蛰了怎么办 小娃头摔包要怎么办抹个什么 老人死了银行钱存死期怎么办 飙酷车神2一进画面就闪退怎么办 电脑开机键盘鼠标没反应怎么办 玩gta4自由城卡怎么办 gta5游戏服务当前不可用怎么办 健身后胳膊变粗怎么办 健身后手臂变粗怎么办 家猫见到我就跑怎么办 走路多了小腿酸痛怎么办 脚有脚气很痒怎么办 地板精油喷多了怎么办 史莱姆泥变硬了怎么办 dnf剑帝命中率低怎么办 无意中讲话伤害了人怎么办 高中上不下去了怎么办 高三坚持不下去怎么办 word点了不保存怎么办 做了ppt没保存怎么办 中班安全教案迷眼了怎么办 美的空调尘满怎么办 高考报名系统密码忘记怎么办