装饰模式
来源:互联网 发布:手机短信轰炸机软件 编辑:程序博客网 时间:2024/05/16 00:38
装饰模式顾名思义,就是添加一些额外的功能(装饰)。装饰是为了更加美观、更具艺术性,而基本的的操作不应该在装饰类中完成。装饰模式使得我们可以动态地为对象增加一些功能,而无需事先在类中定义。
装饰模式结构图如下:
下面是摘自《设计模式》的一个例子,稍微做了修改:
先给出类图:
下面是代码:
/** * @author Brandon B. Lin * */public abstract class VisualComponent {/* 绘制图形 */ public abstract void draw(); /* 调整大小 */ public abstract void reSize(); /* 最大化 */ public abstract void min(); /* 最小化 */ public abstract void max();}
/** * @author Brandon B. Lin * */public class TextView extends VisualComponent {@Overridepublic void draw() {out.println("Do draw!");}@Overridepublic void reSize() {out.println("Do reSize!");}@Overridepublic void min() {out.println("Do min!");}@Overridepublic void max() {out.println("Do max!");}}
/** * @author Brandon B. Lin * */public class VisualDecorator extends VisualComponent {protected VisualComponent component;// cnstructorpublic VisualDecorator(VisualComponent visualComponent) {this.component = visualComponent;// do something else}@Overridepublic void draw() {component.draw();}@Overridepublic void reSize() {component.reSize();}@Overridepublic void min() {component.min();}@Overridepublic void max() {component.max();}}
/** * @author Brandon B. Lin * */public class ScrollDecorator extends VisualDecorator {/** * @param visualComponent */public ScrollDecorator(VisualComponent visualComponent) {super(visualComponent);}@Overridepublic void draw() {component.draw();System.out.println("Add Scrollbar");}}
/** * @author Brandon B. Lin * */public class BorderDecorator extends VisualDecorator {/** * @param visualComponent */public BorderDecorator(VisualComponent visualComponent) {super(visualComponent);}@Overridepublic void draw() {component.draw();System.out.println("Add Border!");}}
/** * @author Brandon B. Lin * */public class DecoratorTest {/** * @param args */public static void main(String[] args) {new TextView().draw();out.println("-------------------------");// 創建一個帶滾動條的new ScrollDecorator(new TextView() ).draw();out.println("-------------------------");// 帶邊框new BorderDecorator(new TextView()).draw();out.println("-------------------------");//帶邊框又帶滾動條 第一種方式new BorderDecorator(new ScrollDecorator(new TextView())).draw();out.println("-------------------------");// 第二種方式new ScrollDecorator(new BorderDecorator(new TextView())).draw();}}
在Java API中,装饰模式最典型的例子是IO操作中的流。基本的读入输出操作在InputStream、OutputStream中定义,FilterInputStream是一个装饰类,其子类添加了诸如缓冲、数据类型转换、压缩、加密等额外功能,因此可以动态配置一个流的特性。
0 0
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- java代码:计算以 字符串 形式存在的算术表达式
- java作用域public ,private ,protected 及不写时的区别
- 排序算法总结
- Maximal Rectangle
- 10677 我们仍未知道那天所看见的花的名字
- 装饰模式
- 并查集学习
- 去除黄褐斑的方法,姬净美怎么样
- LeetCode Sudoku Solver
- 未来--coder的崛起
- YL-236 LCD12864汉字显示C语言编程
- 祛雀斑简便小妙招
- 开始学习ubuntu,目的是学习嵌入式
- Largest Rectangle in Histogram