java设计模式——结构型模式专题(一)装饰模式
来源:互联网 发布:linux远程ssh登录失败 编辑:程序博客网 时间:2024/05/17 10:27
概念
装饰模式:说白了就是动态扩展对象。
UML:
上代码:
抽象构件(Component)角色:将核心方法抽象出来的接口。
package 装饰模式;public interface Component {public abstract void Operition();}
package 装饰模式;public class ConcreteComponent implements Component { @Overridepublic void Operition(){ System.out.println("this is ConcreteComponent"); }}
package 装饰模式;public class Decorator implements Component {Component comp = null;public Decorator(Component comp) {this.comp = comp;}@Overridepublic void Operition() {// TODO 自动生成的方法存根 comp.Operition();}}
具体装饰(ConcreteDecorator)角色:负责修饰ConcreteComponent。
package 装饰模式;public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component comp) {super(comp);}@Overridepublic void Operition() {System.out.println("this is ConcreteDecoratorA");super.Operition();} }
package 装饰模式;public class ConcreteDecoratorB extends Decorator {public ConcreteDecoratorB(Component comp) {super(comp);}@Overridepublic void Operition() {System.out.println("this is ConcreteDecoratorB");super.Operition();} }
测试代码:(相关的看法在代码中有阐述)
package 装饰模式;public class Main {/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根 Component comp = new ConcreteComponent();//持有核心代码的具体实现类 ConcreteDecoratorA decA = new ConcreteDecoratorA(comp);//在保留核心代码的前提下,扩展功能(即“装饰”新功能) ConcreteDecoratorB decB = new ConcreteDecoratorB(comp); //结果:// this is ConcreteDecoratorA// this is ConcreteComponent//// this is ConcreteDecoratorB// this is ConcreteComponent //------------------------------------------------------ // ConcreteDecoratorA decA = new ConcreteDecoratorA(comp);// ConcreteDecoratorB decB = new ConcreteDecoratorB(decA);//实现功能的叠加 //------------------------------------------------------ //设想一下:如果我们不用装饰模式,那么在已有核心功能A前提下,我需要添加功能B,则一般想法是“多重继承”,再 //创建一个子类去继承具有核心功能的类,从而组合的功能是A+B,此时,我如果再想扩展功能C,那么就继续去创建一个类 //继承拥有B功能的类,注意哦,现在是2重继承了。 //如果,我现在要扩展功能D,但又不需要功能B怎么办,或者不需要功能C又怎么办?...完全凌乱了 //如果用装饰模式,那么我会很方便的实现A+B,A+C,A+D,或者A+B+D,A+C+D等组合。 decA.Operition(); System.out.println(); decB.Operition(); //结果:// this is ConcreteDecoratorA// this is ConcreteComponent//// this is ConcreteDecoratorB// this is ConcreteDecoratorA// this is ConcreteComponent }}
装饰模式优点:
1,转移了主类装饰功能,简化主类,或者说避免了多重继承的复杂度。
2,把类的核心职责和修饰功能区分开,而且可以去除相关类中重复的修饰逻辑。
0 0
- java设计模式——结构型模式专题(一)装饰模式
- java设计模式——结构型之装饰模式
- java结构型设计模式——装饰模式
- JAVA设计模式(7) —<结构型>装饰模式(Decorator)
- java设计模式——结构型模式专题(二)适配器模式
- 【设计模式】—-(8)装饰模式(结构型)
- 结构型设计模式(一)(适配器模式,桥接模式,组合模式,装饰模式)
- 设计模式--结构模式--装饰模式--Java
- java设计模式——创建型模式专题(一)简单工厂模式
- java设计模式——行为型模式专题(一)观察者模式
- java设计模式(结构型)之装饰模式
- Java设计模式(7)结构型:装饰模式
- java设计模式之结构型模式-装饰模式
- 设计模式 - 结构型模式 - 装饰模式
- 装饰模式——结构型设计模式之四
- 设计模式(一)——装饰设计模式
- 设计模式——装饰者模式(结构型模式)
- 设计模式学习(结构型模式)—装饰模式(Decorator)
- java io
- Pig 0.12.1安装和使用
- 最新基于adt-bundle-windows-x86的android开发环境筹建
- 这是一个文字游戏?“这个工作你们部门牵头xx”
- 【Kali_015】安装google-chrome、root用户运行、中文字体
- java设计模式——结构型模式专题(一)装饰模式
- cognos优秀博文收藏
- Kruskal算法
- 软件系统开发之前要做的事—需求调研框架
- Gdb 调试多线程程序
- linux内核中内存相关的操作函数
- windows程序员进阶系列:《软件调试》之堆 (一)
- jsp内置对象作用域
- cf452A Eevee