java设计模式学习之装饰者模式
2017-03-08 17:14
337 查看
1.介绍
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。假如当我们想给一个类扩展新的方法的时候,常用的做法是新建一个子类,在子类中使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。当我们在不想增加很多子类的情况下使用装饰器模式扩展类,相比生成子类更为灵活。
java的IO流用到了Decortor(装饰)模式。
2.代码说明
假如有一个形状接口Shape,子类Circle实现了画圆的功能,此时我们想扩展画圆的功能,在画圆的同时给圆上色,用装饰器模式实现如下:先创建形状接口Shape:
package com.tl.skyLine.pattern.DecoratorPattern; /** * Created by tl on 17/3/8. */ public interface Shape { void draw(); }
圆形形状:
package com.tl.skyLine.pattern.DecoratorPattern; /** * Created by tl on 17/3/8. */ public class Circle implements Shape { @Override public void draw() { System.out.println("画一个圆形形状"); } }
装饰对象Decorator和被装饰对象Circle实现同一个接口,装饰对象Decorator持有被装饰对象Circle的实例:
package com.tl.skyLine.pattern.DecoratorPattern; /** * Created by tl on 17/3/8. */ public class Decorator implements Shape { private Circle shape; public Decorator(Circle shape) { this.shape = shape; } private void fillRed() { System.out.println("图形被填充为红色!"); } @Override public void draw() { shape.draw(); fillRed(); } }
测试:
package com.tl.skyLine.pattern.DecoratorPattern; /** * Created by tl on 17/3/8. */ public class DecoratorTest { public static void main(String[] args) { Shape redCircle = new Decorator(new Circle()); redCircle.draw(); } }
结果:
画一个圆形形状
图形被填充为红色!
相关文章推荐
- 学习、探究Java设计模式——装饰者模式
- Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式
- Java设计模式学习—装饰者模式(Decorator)
- Java-马士兵设计模式学习笔记-装饰者模式
- java设计模式学习(三)装饰者模式(decorator)
- java设计模式之装饰者模式学习
- 【知了堂学习笔记】_Java中设计模式之装饰者模式的学习
- Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式
- 【笨鸟先飞】Java重新学习日记16--设计模式之装饰者模式
- Java设计模式知识学习-----装饰者模式
- java/android 设计模式学习笔记(7)---装饰者模式
- java设计模式学习之装饰者模式
- java 设计模式 学习笔记(三)装饰者模式 推荐
- <JAVA学习笔记二>——设计模式之装饰者设计模式
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- JAVA设计模式学习第一天 设计模式之Flyweight——打球篇
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- JAVA设计模式学习之----创建模式:单例模式
- 设计模式学习笔记之 装饰者模式
- 设计模式学习--装饰者模式