组合模式
将对象组合成树形结构,表示整体和部件的层次结构。interface Drawable { void draw(); } // 表示整体的canvas类 class Canvas : Drawable { Drawable _items[]; void draw() { foreach item in _items { item.draw(); } } } // 表示部件的类 class Line : Drawable { void draw () { /* draw line */} } class Text : Drawable { void draw() { /* draw text */} } class Rectangle : Drawable { void draw() { /* draw rectangle */} } // 使用方式 main() { Canvas canvas; canvas._items[0] = new Line; canvas._items[1] = new Text; canvas._items[2] = new Rectangle; canvas.draw(); }
装饰模式
动态给对象添加一些额外的职责。 例如,现有一个绘制固定宽度线条的类,现在需要将其扩展为可动态设置宽度。interface Drawable { void draw(); } class Line : Drawable { void draw () { /* 绘制固定宽度线条*/} } class LineDecorator : Drawable { Line _line; LineDecorator(int width) { /* 构造时设置当前画笔宽度*/ } void draw() { /* 应用当前画笔宽度 */ _line.draw(); // 绘制线条 } } // 使用: 绘制线条函数 void drawLine(Drawable line) { line.draw(); } main() { // 只能绘制固定长度先挑 Drawable line1 = new Line; drawLine(line1); // 可以修改线条宽度 Drawable line2 = new LineDecorator(5); drawLine(line2); }