Loading... ## 定义 Decorator Pattern: 动态地给一个对象增加一些额外地职责,就增加对象功能来说,装饰模式比生成子类实现更灵活。装饰模式是一种对象结构型模式。 ---------- ## UML示例 ![装饰模式](https://s1.ax1x.com/2020/05/24/YzRBM8.png) ---------- ## 代码示例 ```java // 抽象构件类 abstract class Component { public abstract void display(); } ``` ```java // 窗体类 具体构件类 public class Window extends Component{ public void display() { System.out.println("显示窗体"); } } // 文本框类:具体构件类 public class TextBox extends Component{ public void display() { System.out.println("显示文本框"); } } // 列表框类 具体构件 public class ListBox extends Component{ public void display() { System.out.println("显示列表框"); } } ``` ```java // 构件装饰类 抽象装饰类 public class ComponentDecorator extends Component{ private Component component; public ComponentDecorator(Component component){ this.component = component; } public void display(){ component.display(); } } ``` ```java // 滚动条装饰类 具体装饰类 public class ScrollBarDecorator extends ComponentDecorator{ public ScrollBarDecorator(Component component) { super(component); } public void display() { super.display(); setScrollBar(); } public void setScrollBar(){ System.out.println("为构件添加滚动条"); } } ``` ```java // 黑色边框装饰类 public class BlackBorderDecorator extends ComponentDecorator{ public BlackBorderDecorator(Component component) { super(component); } public void display() { super.display(); setBlackBorder(); } public void setBlackBorder(){ System.out.println("为构件添加黑色边框"); } } ``` ```java public class Client { public static void main(String[] args) { // 添加抽象构件定义 Component component, componentSB, comSBB; // 定义具体构件 component = new Window(); componentSB = new ScrollBarDecorator(component); componentSB.display(); // 装饰类不仅可以注入具体构件类 // 装饰类还可以注入具体装饰类获得拓展! // 这是它与桥接模式不同地方之一 comSBB = new BlackBorderDecorator(componentSB); comSBB.display(); } } ``` 客户端输出 ``` 显示窗体 为构件添加滚动条 显示窗体 为构件添加滚动条 为构件添加黑色边框 ``` 最后修改:2020 年 05 月 24 日 02 : 27 PM © 允许规范转载