Java设计模式学习—装饰者模式(Decorator)
2017-12-10 17:38
423 查看
装饰者模式:动态的将职责添加到对象上,相比继承来扩展类的功能,装饰者模式更为灵活。
装饰者设计模式设计原则:
1)、多用组合,少用继承;继承设计子类的行为在编译时静态决定,所有子类都会继承到相同的行为,如果采用组合的方式,就可以再运行过程中动态的对类进行扩展;
2)、被修饰类对外扩展开放,对修改关闭;
3)、装饰者和被装饰者具有相同的超类型;
代码解释:
通过该例子我们来分析装饰者如何给被装饰者动态扩展:
step1:sc2调用fun()方法,此时fun方法体调用super.fun(),即DecoratedClass
类的fun方法,该方法用调用超类型的fun()方法,此时超类形的实现是DecoratorOne,即调用的是DecoratorOne的fun方法,该方法里又调用super.fun(),方法体的实现是调用超类的fun(),而此时超类的实现是SubSuperClass,因此调用该类的fun()方法,层层相扣,从SubSuperClass的fun扩展到DecoratorTwo的fun.
装饰者设计模式设计原则:
1)、多用组合,少用继承;继承设计子类的行为在编译时静态决定,所有子类都会继承到相同的行为,如果采用组合的方式,就可以再运行过程中动态的对类进行扩展;
2)、被修饰类对外扩展开放,对修改关闭;
3)、装饰者和被装饰者具有相同的超类型;
代码解释:
/**装饰者与被装饰者的相同超类型**/ interface SuperClass{ public void fun(); } /**被装饰者类 被装饰的类是一个抽象类,抽象类不能实例化,需要通过子类来实例化 **/ abstract class DecoratedClass implements SuperClass{ private SuperClass sc; public DecoratedClass(SuperClass sc){ this.sc = sc; } public void fun(){ sc.fun(); } } /**装饰者1**/ class DecoratorOne extends DecoratedClass{ public DecoratorOne(SuperClass sc){ super(sc); } public void fun(){ super.fun(); addFun1(); } public void addFun1(){ } } /**装饰者2**/ class DecoratorTwo extends DecoratedClass{ public DecoratorTwo(SuperClass sc){ super(sc); } public void fun(){ super.fun(); addFun2(); } public void addFun2(){ } } class SubSuperClass implements SuperClass { public void fun(){} } public class DecoratorTest{ public static void main(String[]args){ SuperClass sc = new SubSuperClass(); SuperClass sc1 = new DecoratorOne(sc); SuperClass sc2 = new DecoratorTwo(sc1); sc2.fun(); } }
通过该例子我们来分析装饰者如何给被装饰者动态扩展:
step1:sc2调用fun()方法,此时fun方法体调用super.fun(),即DecoratedClass
类的fun方法,该方法用调用超类型的fun()方法,此时超类形的实现是DecoratorOne,即调用的是DecoratorOne的fun方法,该方法里又调用super.fun(),方法体的实现是调用超类的fun(),而此时超类的实现是SubSuperClass,因此调用该类的fun()方法,层层相扣,从SubSuperClass的fun扩展到DecoratorTwo的fun.
相关文章推荐
- java设计模式学习(三)装饰者模式(decorator)
- java 设计模式 学习笔记(三)装饰者模式 推荐
- 设计模式学习笔记---装饰模式decorator(Java版)
- Java学习之道:java设计模式—Decorator模式
- Java-马士兵设计模式学习笔记-装饰者模式
- 【设计模式】学习笔记3:装饰者模式(Decorator )
- java 设计模式学习笔记九 decorator装饰模式
- Java设计模式(十):装饰者模式Decorator
- 设计模式学习3——装饰者模式(Decorator)
- 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法
- 设计模式学习之装饰者模式(Decorator)
- 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法
- Java设计模式:装饰者模式(Decorator)
- Java设计模式-装饰者模式(Decorator Pattern)
- 设计模式学习笔记--装饰者模式(Decorator Pattern)
- 学习:java设计模式—Decorator模式
- java设计模式之装饰者模式Decorator
- 学习:java设计模式—Decorator模式
- 设计模式学习之装饰者模式(Decorator,结构型模式)(16)
- 设计模式学习--装饰者模式(Decorator Pattern)