设计模式——装饰模式
来源:互联网 发布:三角衣柜淘宝店铺质量 编辑:程序博客网 时间:2024/05/21 14:52
Author:云都小生
概述
一个GUI(图形化)程序,有很多的控件组成,例如说文本框、按钮、选择菜单等等,而这些文本框、按钮、选择菜单又会有很多种风格。我们一般会怎么去设计文本框、按钮、选择菜单与它们“风格”“装饰”的架构。
emmm···· 应该是这样···
这种用继承来架构的解决方案,可扩展性差,例如说我想要增加一个其他的特效,那每个控件下都得增加一个类,并且得修改一个类。除此之外,还有许多重复的代码,效率很低。
那怎么办呢?
我在学习GUI程序设计的时候,如果想要在一个原始的窗口中添加什么东西的控件的时候,通常都是add(控件)的方式。控件与原始窗口的关系是组合 36
+ 关系,通过add(控件)的方式添加到窗口中。
还记不记得有一个面向对象的设计原则——多用组合,少用继承,继承会增加程序的耦合程度。
了解装饰模式
在现实生活中,我们可以给我们的汽车、房子进行装饰,增加新的东西。装饰模式是一种对象结构型模式,它的用途一般是用来扩展系统功能。
在装饰模式中有以下角色:
抽象构件:抽象构件是具体构件和抽象修饰类的共同父类。具体构件例如按钮、文本框这些,而修饰类可以是透明边框、高亮边框等,而抽象修饰类是它们的共同父类。
不要问我为什么要弄一个抽象修饰类,问了的话自动滚去刷Java面向对象。
具体构件:它们是抽象构件的子类,定义了具体的构件对象,例如说按钮、文本框。
抽象装饰类:它也是抽象构建的子类,用于给具体构建添加职责。它内部会维护一个指向抽象构件对象的引用,可以用来调用构建对象的方法。
具体装饰类:是抽象装饰类的子类,负责向构件添加新的职责。并且,它还定义了一些新的方法。
代码示范
//抽象构件abstract class Component { public abstract void display();}//具体构件:按钮public class Button extends Component{ public void display() { System.out.println("显示按钮"); }}//具体构件:标签public class Label { public void display() { System.out.println("显示标签"); }}//具体构件:文本框public class TextBox extends Component{ public void display() { System.out.println("显示文本框"); }}//抽象装饰类public class ComponentDecorator extends Component{ private Component component; public ComponentDecorator(Component component) //注入抽象构件类型的对象 { this.component = component; } public void display() { component.display(); }}//具体装饰类:透明边框public class InvisibleBorder extends ComponentDecorator{ public InvisibleBorder(Component component) { super(component); } private void setBorder() { System.out.println("设置了透明边框"); }}//具体装饰类:高亮边框public class HighlightBorder extends ComponentDecorator{ public HighlightBorder(Component component) { super(component); } private void setBorder() { System.out.println("设置了高亮边框"); }}
2017/12/4 1:30:52 @Author:云都小生
阅读全文
0 0
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式——装饰设计模式
- 设计模式——装饰设计模式
- 设计模式——装饰设计模式
- 【设计模式】——Decorator装饰模式
- 每日设计模式——装饰模式
- 设计模式——装饰者模式
- 设计模式——装饰模式
- 设计模式——装饰模式
- java设计模式——装饰模式
- 设计模式——装饰者模式
- 大话设计模式——装饰模式
- 设计模式——装饰模式
- 设计模式——装饰者模式
- 小结 | 初级贪心算法
- 【Scikit-Learn 中文文档】模型持久化
- 一个屌丝程序猿的人生(七十七)
- 【Scikit-Learn 中文文档】Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- 【Scikit-Learn 中文文档】特征提取
- 设计模式——装饰模式
- nginx的基本使用学习
- Hibernate配置使用(详解)
- 【Scikit-Learn 中文文档】预处理数据
- 【Scikit-Learn 中文文档】无监督降维
- 【Scikit-Learn 中文文档】随机投影
- Java中static关键字解析
- android逆向学习,笔记(一)
- VMWare Linux虚拟机设置固定IP上网方法(靠谱)