当前位置: 首页 > news >正文

怎样做一张网站的banner/免费域名解析

怎样做一张网站的banner,免费域名解析,办事处网站建设,集团公司网站建设方案C 装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不修改现有类的情况下动态地给一个对象添加一些额外的职责。装饰模式通常用来扩展功能,特别是在不希望通过继承的方式来改变类时,它可以通过“装饰”原始对象…

C++ 装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不修改现有类的情况下动态地给一个对象添加一些额外的职责。装饰模式通常用来扩展功能,特别是在不希望通过继承的方式来改变类时,它可以通过“装饰”原始对象来增加行为。

经典示例:图形界面控件的装饰

简单的图形接口和多个实现类,例如 CircleRectangle,可以使用装饰模式来增加一些功能,比如绘制时增加边框、阴影等,而不修改原始的图形类。

1. 代码示例

#include <iostream>
#include <memory>// 组件接口
class Shape {
public:virtual ~Shape() = default;virtual void draw() const = 0;
};// 具体组件类:Circle
class Circle : public Shape {
public:void draw() const override {std::cout << "Drawing a Circle" << std::endl;}
};// 具体组件类:Rectangle
class Rectangle : public Shape {
public:void draw() const override {std::cout << "Drawing a Rectangle" << std::endl;}
};// 装饰器基类
class ShapeDecorator : public Shape {
protected:std::shared_ptr<Shape> wrappedShape;  // 被装饰的对象public:explicit ShapeDecorator(std::shared_ptr<Shape> shape) : wrappedShape(std::move(shape)) {}virtual void draw() const override {wrappedShape->draw();}
};// 具体装饰类:BorderDecorator
class BorderDecorator : public ShapeDecorator {
public:explicit BorderDecorator(std::shared_ptr<Shape> shape) : ShapeDecorator(std::move(shape)) {}void draw() const override {ShapeDecorator::draw();std::cout << "Adding Border" << std::endl;}
};// 具体装饰类:ShadowDecorator
class ShadowDecorator : public ShapeDecorator {
public:explicit ShadowDecorator(std::shared_ptr<Shape> shape) : ShapeDecorator(std::move(shape)) {}void draw() const override {ShapeDecorator::draw();std::cout << "Adding Shadow" << std::endl;}
};// 测试代码
int main() {// 创建一个基本的 Circlestd::shared_ptr<Shape> circle = std::make_shared<Circle>();std::cout << "Basic Circle:" << std::endl;circle->draw();std::cout << std::endl;// 给 Circle 增加边框std::shared_ptr<Shape> borderedCircle = std::make_shared<BorderDecorator>(circle);std::cout << "Circle with Border:" << std::endl;borderedCircle->draw();std::cout << std::endl;// 给 Circle 增加阴影std::shared_ptr<Shape> shadowedCircle = std::make_shared<ShadowDecorator>(circle);std::cout << "Circle with Shadow:" << std::endl;shadowedCircle->draw();std::cout << std::endl;// 给 Circle 增加边框和阴影std::shared_ptr<Shape> decoratedCircle = std::make_shared<ShadowDecorator>(borderedCircle);std::cout << "Circle with Border and Shadow:" << std::endl;decoratedCircle->draw();std::cout << std::endl;return 0;
}

2. 解释

  • Shape:这是一个抽象接口,定义了 draw() 方法,所有具体的图形(如 CircleRectangle)都继承自它。
  • CircleRectangle:这些是具体的图形类,直接实现了 Shape 接口的 draw() 方法,表示如何绘制一个圆形或矩形。
  • ShapeDecorator:这是装饰器基类,它也实现了 Shape 接口,并持有一个 Shape 指针(即被装饰的对象)。它的 draw() 方法会委托给被装饰的 Shape 对象的 draw() 方法。
  • BorderDecoratorShadowDecorator:这两个类是具体的装饰器,分别在原始图形的 draw() 方法基础上增加了“边框”和“阴影”功能。

3. 测试输出

Basic Circle:
Drawing a CircleCircle with Border:
Drawing a Circle
Adding BorderCircle with Shadow:
Drawing a Circle
Adding ShadowCircle with Border and Shadow:
Drawing a Circle
Adding Border
Adding Shadow

4. 总结

在这个例子中,通过装饰器模式能在不修改原始 CircleRectangle 类的情况下,灵活地为它们增加边框或阴影等额外的功能。每个装饰器类都是 ShapeDecorator 的一个具体实现,它封装了一个 Shape 对象并在其原有功能上增加新的功能。

装饰模式的优势在于它能非常灵活地组合不同的装饰,而无需修改原有代码,使得代码更具扩展性和可维护性。

http://www.cadmedia.cn/news/656.html

相关文章:

  • wordpress主题安装ftp/网络优化的三个方法
  • 做游戏CG分享的网站/银川seo
  • 做汽车养护的网站/普通话的顺口溜6句
  • 如何查看网站建站程序/百度指数支持数据下载吗
  • 织梦 网站栏目管理/站长之家音效
  • 小白 wordpress/天津百度seo
  • wordpress标签随机调用/aso应用优化
  • 西安网页制作工作室/网站优化助手
  • 网站建设前准备/广州seo优化效果
  • 东台哪家专业做网站/云南今日头条新闻
  • 淘宝客网站用什么软件做/bt蚂蚁
  • 用python做网站优点/南宁百度seo排名优化软件
  • 关于网站建设的讲话/竞价推广方案
  • 局域网网站制作教程/考证培训机构报名网站
  • 网站建设设计有哪些/淘宝运营培训班学费大概多少
  • 徐州网站制作案例/t和p在一起怎么做网站
  • 网络品牌推广计划/seo搜索引擎优化名词解释
  • maupassant wordpress/aso优化技巧大aso技巧
  • 简述网站建设的流程/成都百度推广公司电话
  • 成都旅游酒店住哪里比较方便/谷歌seo搜索
  • wordpress同步facebook/windows优化大师要钱
  • 东莞本地招聘网站有哪些/百度客户电话
  • 广州的网站建设公司哪家好/微信广告推广如何收费
  • 学做网站前景/网站目录提交
  • 山东企业网站建设费用/什么软件可以刷网站排名
  • 中工信融做网站怎么样/长春网站建设公司哪个好
  • 学校网站建设项目管理报告/网站的宣传推广方式
  • 做毕业设计免费网站建设/怎么注册网站免费的
  • 自己可以做类似淘宝客网站吗/网站搭建外贸
  • 同德县公司网站建设/2022知名品牌营销案例100例