1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java设计模式之装饰者模式学习

java设计模式之装饰者模式学习

时间:2020-09-20 11:18:55

相关推荐

java设计模式之装饰者模式学习

装饰者模式

Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为

比如现在有个方法,是过滤文字的方法

1.接口:

package com.qiao.wrapper;public interface MessageBoardHandler {public String filter(String msg);}

2.继承者

package com.qiao.wrapper;public class MessageBoard implements MessageBoardHandler{public String filter(String msg) {return "处理留言板上的内容:"+msg;}}

3.调用

@Testpublic void test4(){MessageBoardHandler hanlder = new MessageBoard();String msg = hanlder.filter("<a>hello</a>");System.out.println(msg);}

控制台输出

现在我有个需求,我想把留言板里面的标签都给过滤了,但是我又不想把原有的方法改变。

这时,一个方法就是,在方法外面再包裹一层

1.写一个包装类,也实现MessageBoardHandler这个接口

package com.qiao.wrapper;public abstract class MessageBoardDecorator implements MessageBoardHandler{private MessageBoardHandler handler;public MessageBoardDecorator(MessageBoardHandler hanlder){this.handler=hanlder;}public String filter(String msg) {return this.handler.filter(msg);}}

2.再写个html标签过滤的类,继承这个包装类

package com.qiao.wrapper;public class HtmlFilter extends MessageBoardDecorator {private MessageBoardHandler hanlder;public HtmlFilter(MessageBoardHandler hanlder) {super(hanlder);this.hanlder=hanlder;}public String filter(String msg){String temp = this.hanlder.filter(msg);temp+=" ^^^Filter html tag";return temp;}}

3.调用

@Testpublic void test5(){MessageBoardDecorator dec = new HtmlFilter(new MessageBoard());String msg = dec.filter("<a>hello</a>");System.out.println(msg);}

输出

加入我现在不想过滤html标签了,我想过滤一些敏感词了,这是我只要在原有的方法上包装另一个方法即可

package com.qiao.wrapper;public class SensitiveFilter extends MessageBoardDecorator {private MessageBoardHandler hanlder;public SensitiveFilter(MessageBoardHandler hanlder) {super(hanlder);this.hanlder = hanlder;}public String filter(String msg){String temp = this.hanlder.filter(msg);temp += " filter sensitive words ";return temp;}}

调用,

@Testpublic void test6(){MessageBoardDecorator dec = new SensitiveFilter(new MessageBoard());String msg = dec.filter("<a>hello</a>");System.out.println(msg);}

输出

处理留言板上的内容:<a>hello</a> filter sensitive words

个人理解,其实就是在原有方法上包装一层方法,达到自己的目的,其中在java的io中就大量运用了包装者模式

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。