装饰者模式
来源:互联网 发布:数据公司 30亿 收购 编辑:程序博客网 时间:2024/06/06 01:11
装饰者模式其实跟责任链是有类似的地方的,就我个人目前的理解来说,两者的区别主要有以下方面:
责任链-- 最简单直接的责任链的实现就是拦截器了,那么功能上也如拦截,是针对数据的层层校验。
装饰者-- 这个层次上会复杂一些,主要分为三层的结构
第一层 共性接口
所有的实现类都应该遵循公共接口的规范;
第二层 功能类
也可以说是一个模块,我们知道一个功能的实现是要依赖其他的一些规则来实现的,那么下面是具体的规则的实现;
第三层 规则类
类似衣服或者积木之类的,往功能类上进行拼接,达到在毛坯房上不停的装修的效果。
第一层 共性接口 下面的第二层和第三层都是要实现这个抽象类的
public abstract class Rule {private String ruleName;public void setRuleName(String ruleName) {this.ruleName = ruleName;}@Overridepublic String toString() {return ruleName;}abstract void filter();}
第二层 功能类 具体就是某个类了
public class Forum extends Rule {@Overridevoid filter() {System.out.println(toString());}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "系统模块开始";}}
第三层 规则类
public class Abuse extends Rule {private Rule rule; public void decorate(Rule rule) {this.rule = rule;}@Overridevoid filter() {if (rule != null) {rule.filter();}System.out.println(toString());}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "辱骂语言过滤";}}
public class AntiCountry extends Rule {private Rule rule; public void decorate(Rule rule) {this.rule = rule;}@Overridevoid filter() {if (rule != null) {rule.filter();}System.out.println(toString());}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "反动词语过滤";}}
最后的调用
public class Client {/** * @param args */public static void main(String[] args) {Forum forum = new Forum();Abuse abuse = new Abuse();AntiCountry antiCountry = new AntiCountry();abuse.decorate(forum);antiCountry.decorate(abuse);antiCountry.filter();}}
输出结果
系统模块开始
辱骂语言过滤
反动词语过滤
总结:
从执行的结果大概可以看出,装饰者的每个功能的类的执行顺序是从下往上,而责任链则是从上往下;
个人认为两个都是相同的链式传递,在大部分的情况下能够互相实现(目前未想到有什么不能互相转换的情况)
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- 各种CCMenu的使用
- hdu2099
- 最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他
- IJ整理
- 使用SharedPreferences保存登陆账号和密码
- 装饰者模式
- 基于Python的一个简单爬虫(糗事百科爬虫)
- usaco frac1
- CCProgressTimer 使用
- usaco castle
- make menuconfig/.config/Kconfig解析
- c#中关于udp实现可靠地传输(数据包的分组发送) 升级版
- JAVA学习笔记—review基本知识4
- COCOS2D-X 3.0 Resource下建立一个文件夹,但是文件夹里的资源无法访问