基本概念
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向现有对象添加新功能,又不改变其结构。通过将对象放入包装器中,然后用装饰器对象包裹原始对象,以提供额外的功能。
装饰器模式需要实现的部分为:
- Component(被装饰对象的基类):定义一个对象接口,可以动态地给这些对象添加新的职责。
- ConcreteComponent(具体被装饰对象):实现Component接口的具体对象,即被装饰的对象。
- Decorator(装饰者抽象类):继承自Component,用于给 ConcreteComponent 添加新的职责。
- ConcreteDecorator(具体装饰类):扩展Decorator类,实现具体的装饰功能。
使用场景
- 当需要动态地给对象添加额外的功能,而又不希望改变其结构时。
- 当需要为对象的部分功能或属性添加或移除时。
- 当继承不太合适时。
实现
QT的文本处理
使用 QTextDocument 类来处理文本内容时通过装饰器模式,可以创建不同的装饰器来实现文本的格式化、排版、高亮等功能,从而实现文本的多样化显示效果。
-
被装饰对象: QTextDocument 是具体的文本组件,它提供了文本内容的基本功能。
-
装饰者抽象类:QTextFormat 类是 QTextCursor 对象的属性,用于控制文本的格式.
-
具体装饰类:QTextBlockFormat ,QTextCharFormat 类等是 QTextFormat 类的子类,负责实现具体的文字装饰功能。
#include <QApplication> #include <QTextDocument> #include <QTextEdit> int main(int argc, char *argv[]) { QApplication app(argc, argv); //被装饰对象 QTextDocument document; QTextCursor cursor(&document); cursor.insertText("Hello, World!"); //具体装饰器 QTextCharFormat colorFormat; colorFormat.setForeground(Qt::red); QTextBlockFormat blockFormat; blockFormat.setLeftMargin(1); blockFormat.setRightMargin(1); cursor.setPosition(0); cursor. Select(QTextCursor::Document); // 应用装饰 cursor.setCharFormat(colorFormat); cursor.setBlockFormat(blockFormat); // 显示文本 QTextEdit textEdit; textEdit.setDocument(&document); textEdit.show(); return app.exec(); }