设计模式之结构型-装饰模式(7)
来源:互联网 发布:淘宝做代理有风险吗 编辑:程序博客网 时间:2024/06/05 08:48
今天介绍装饰模式
定义:在不改变原类文件和不使用继承的情况下,动态的拓展一个对象的功能。
下面我们看一下类图
下面我用java代码实现一下
public interface Component { //待装饰的父类接口 void method();}
public class ConcreteComponent implements Component {//待装饰类 @Override public void method() { System.out.print("我是需要被装饰的方法"); }}
public abstract class Decorator implements Component { //抽象装饰器 private final Component component; public Decorator(Component component) { this.component=component; } @Override public void method() { component.method(); }}
public class ConcreteDecoratorA extends Decorator { //具体装饰器A public ConcreteDecoratorA(Component component) { super(component); } @Override public void method() { System.out.print("对方法进行一层A包装"); super.method(); System.out.print("A包装结束"); } public void methodA(){ System.out.print("被装饰器A拓展的功能"); }}
public class ConcreteDecoratorB extends Decorator { //具体装饰器B public ConcreteDecoratorB(Component component) { super(component); } @Override public void method() { System.out.print("对方法进行一层B包装"); super.method(); System.out.print("B包装结束"); } public void methodB(){ System.out.print("被装饰器B拓展的功能"); }}
最后是测试类
public class Test { public static void main(String[] args) { ConcreteDecoratorA concreteDecoratorA=new ConcreteDecoratorA(new ConcreteComponent()); ConcreteDecoratorB concreteDecoratorB=new ConcreteDecoratorB(new ConcreteComponent()); concreteDecoratorA.method(); concreteDecoratorA.methodA(); concreteDecoratorB.method(); concreteDecoratorB.methodB(); }}
结果:对方法进行一层A包装
我是需要被装饰的方法
A包装结束
被装饰器A拓展的功能
我是需要被装饰的方法
B包装结束
被装饰器B拓展的功能
可以看出,我们对需要装饰的类ConcreteComponent进行了装饰,拓展了其原有的功能。
java中,IO流大量使用了装饰模式
阅读全文
1 0
- 设计模式之结构型-装饰模式(7)
- (8)设计模式之装饰模式(结构型模式)
- 设计模式-结构型之装饰模式
- java设计模式(结构型)之装饰模式
- 结构型:设计模式之装饰模式(十一)
- 设计模式 结构型设计模式之装饰模式
- java设计模式之结构型模式-装饰模式
- Java设计模式(7)结构型:装饰模式
- 设计模式 - 结构型模式 - 装饰模式
- 装饰模式——结构型设计模式之四
- 设计模式(结构型)之装饰者模式(Decorator Pattern)
- java设计模式——结构型之装饰模式
- 【设计模式】结构型模式之装饰器Decorator
- Decorator装饰设计模式(结构型)
- 设计模式-结构型-装饰
- Java设计模式概述之结构型模式(装饰器模式)
- javascript设计模式之装饰器模式(结构型模式)
- Java设计模式之结构型模式-装饰器模式(Decorator)
- Java还要再学一遍基础(九)HashMap原理
- Android
- 对比Ruby和Python的垃圾回收(2)
- 使用SfntTool制作字体剪辑工具5
- eclipse无法打开web包的解决方法
- 设计模式之结构型-装饰模式(7)
- 自定义View (四): onDraw 之 Canvas画布
- 基于webpack的前端工程化开发之多页站点篇(二)
- jzoj P1842【汕头市选2014】平均
- hud1031JAVA实现
- JSON.stringify()
- error: 'xxx函数' is inaccessible,'Text' is not an accessible base of 'TextLine'
- gulp+webpack配置
- HTML <area><map>标签及在实际开发中的应用