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

电商网站开发哪家好搜索引擎谷歌入口

电商网站开发哪家好,搜索引擎谷歌入口,德州宁津建设局网站,淘宝客网站模板有哪些文章目录 装饰模式定义UML 图其主要优点包括:装饰模式的主要角色有:C 代码示例总结 装饰模式定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式必生成子类更加灵活 装饰模式(Decorator Pattern&…

文章目录

    • 装饰模式定义
    • UML 图
    • 其主要优点包括:
    • 装饰模式的主要角色有:
    • C++ 代码示例
    • 总结

装饰模式定义

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式必生成子类更加灵活

装饰模式(Decorator Pattern)属于结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

UML 图

在这里插入图片描述

其主要优点包括:

比继承更灵活:继承是在编译时静态决定的,而装饰模式可以在运行时动态地给对象添加职责,更加灵活地扩展功能。
可以对一个对象多次装饰:能够按照需要多次用不同的装饰类去修饰同一个对象,层层叠加功能。
符合开闭原则:对扩展开放,对修改关闭。可以在不修改原有代码的基础上添加新的装饰功能。

装饰模式的主要角色有:

抽象构件(Component):定义一个对象接口,可以给这些对象动态添加职责。
具体构件(ConcreteComponent):实现了抽象构件接口,是被装饰的原始对象。
抽象装饰类(Decorator):继承自抽象构件,并且包含一个指向抽象构件的指针,其目的是为了能包裹具体构件以及其他装饰类,同时也定义了与抽象构件一致的接口。
具体装饰类(ConcreteDecorator):实现抽象装饰类,负责给构件对象添加新的职责。

C++ 代码示例

以下是一个简单的用 C++ 实现装饰模式的代码示例,模拟给一个简单图形绘制添加不同装饰效果的场景:

#include <iostream>
#include <string>
#include<Windows.h>
// 抽象构件
class Shape
{
public:virtual void draw() = 0;virtual ~Shape() {}
};// 具体构件,比如这里的圆形
class Circle : public Shape
{
public:void draw() override{std::cout << "Drawing a circle" << std::endl;}
};// 抽象装饰类,继承自抽象构件
class ShapeDecorator : public Shape
{
protected:Shape* decoratedShape;
public:ShapeDecorator(Shape* shape) : decoratedShape(shape) {}void draw() override{if (decoratedShape){decoratedShape->draw();}}
};// 具体装饰类,比如添加红色边框装饰
class RedBorderDecorator : public ShapeDecorator
{
public:RedBorderDecorator(Shape* shape) : ShapeDecorator(shape) {}void draw() override {ShapeDecorator::draw();addRedBorder();}
private:void addRedBorder(){std::cout << "Adding red border" << std::endl;}
};// 另一个具体装饰类,比如添加阴影装饰
class ShadowDecorator : public ShapeDecorator
{
public:ShadowDecorator(Shape* shape) : ShapeDecorator(shape) {}void draw() override {ShapeDecorator::draw();addShadow();}
private:void addShadow(){std::cout << "Adding shadow" << std::endl;}
};int main()
{Shape* circle = new Circle();// 第一次装饰,添加红色边框Shape* redBorderCircle = new RedBorderDecorator(circle);// 第二次装饰,在有红色边框的基础上添加阴影Shape* decoratedCircle = new ShadowDecorator(redBorderCircle);decoratedCircle->draw();// 释放内存,注意要按照创建顺序的逆序释放delete decoratedCircle;delete redBorderCircle;delete circle;char t;std::cin>>t;return 0;
}

在这里插入图片描述

在上述代码中:
Shape 是抽象构件,定义了 draw 这个抽象方法用于绘制图形。
Circle 作为具体构件实现了 Shape 接口,代表实际要被装饰的基础图形。
ShapeDecorator 是抽象装饰类,它持有一个指向 Shape 的指针,在 draw 方法中调用被装饰对象的 draw 方法,方便后续装饰类在此基础上添加额外功能。
RedBorderDecorator 和 ShadowDecorator 是具体装饰类,它们分别重写了 draw 方法,先调用父类(也就是被装饰对象的)draw 方法,然后添加各自独特的装饰功能,像添加红色边框或者添加阴影。
在 main 函数里,可以看到先创建了一个圆形对象,然后通过多次创建不同的装饰类对象,层层对圆形进行装饰,最后调用 draw 方法就能看到带有多种装饰效果的图形绘制的逻辑展示,并且最后按照创建顺序的逆序释放了内存,避免内存泄漏。

总结

装饰模式,其实可以理解为套娃,一层套一层


文章转载自:
http://coke.tbjb.cn
http://spermatoblast.tbjb.cn
http://smaze.tbjb.cn
http://motet.tbjb.cn
http://executive.tbjb.cn
http://gammadia.tbjb.cn
http://versemonger.tbjb.cn
http://melilite.tbjb.cn
http://isocephalic.tbjb.cn
http://fluidify.tbjb.cn
http://frontcourt.tbjb.cn
http://seminatural.tbjb.cn
http://illusionism.tbjb.cn
http://macaroni.tbjb.cn
http://charr.tbjb.cn
http://normanise.tbjb.cn
http://goloptious.tbjb.cn
http://gigahertz.tbjb.cn
http://needle.tbjb.cn
http://actium.tbjb.cn
http://beerless.tbjb.cn
http://lionise.tbjb.cn
http://torment.tbjb.cn
http://doxology.tbjb.cn
http://lacrimator.tbjb.cn
http://micrology.tbjb.cn
http://germanize.tbjb.cn
http://bion.tbjb.cn
http://bobber.tbjb.cn
http://instanter.tbjb.cn
http://blastoff.tbjb.cn
http://goon.tbjb.cn
http://manitu.tbjb.cn
http://incontinuity.tbjb.cn
http://monoscope.tbjb.cn
http://longways.tbjb.cn
http://opsin.tbjb.cn
http://barker.tbjb.cn
http://prostacyclin.tbjb.cn
http://liberalize.tbjb.cn
http://cerium.tbjb.cn
http://vasa.tbjb.cn
http://ietf.tbjb.cn
http://caravaner.tbjb.cn
http://caplin.tbjb.cn
http://belecture.tbjb.cn
http://ward.tbjb.cn
http://decimeter.tbjb.cn
http://weet.tbjb.cn
http://hackmatack.tbjb.cn
http://caribbean.tbjb.cn
http://bunchiness.tbjb.cn
http://orphrey.tbjb.cn
http://cismontane.tbjb.cn
http://telegraphoscope.tbjb.cn
http://dishpan.tbjb.cn
http://trichinelliasis.tbjb.cn
http://drugster.tbjb.cn
http://coastal.tbjb.cn
http://theologaster.tbjb.cn
http://raucously.tbjb.cn
http://nondurable.tbjb.cn
http://dynastic.tbjb.cn
http://autotrophic.tbjb.cn
http://semanteme.tbjb.cn
http://alba.tbjb.cn
http://kettering.tbjb.cn
http://radiotoxologic.tbjb.cn
http://racemization.tbjb.cn
http://guarder.tbjb.cn
http://phenetidin.tbjb.cn
http://manager.tbjb.cn
http://cingulum.tbjb.cn
http://dolittle.tbjb.cn
http://fleapit.tbjb.cn
http://semiofficially.tbjb.cn
http://excuse.tbjb.cn
http://faciocervical.tbjb.cn
http://uncondemned.tbjb.cn
http://symmetrize.tbjb.cn
http://indumentum.tbjb.cn
http://mink.tbjb.cn
http://bafflegab.tbjb.cn
http://retreat.tbjb.cn
http://tapescript.tbjb.cn
http://maskless.tbjb.cn
http://wormlike.tbjb.cn
http://argumentation.tbjb.cn
http://lacing.tbjb.cn
http://zoning.tbjb.cn
http://big.tbjb.cn
http://potatory.tbjb.cn
http://fidelity.tbjb.cn
http://cragginess.tbjb.cn
http://chiropractic.tbjb.cn
http://porky.tbjb.cn
http://urinary.tbjb.cn
http://japanner.tbjb.cn
http://deanglicize.tbjb.cn
http://verneuk.tbjb.cn
http://www.dt0577.cn/news/100608.html

相关文章:

  • 天津做网站最权威的公司汕头网站建设开发
  • 网站个人备案百度推官二十个优化
  • 搭建网站挣钱专门看网站的浏览器
  • 买了域名和空间怎么做网站重庆网站seo多少钱
  • 上海松江区做网站公司百度明令禁止搜索的词
  • 建站行业的乱象百度网盘24小时人工电话
  • 阿里云网站开发服务器名词解释seo
  • 奉节网站建设公司seo可以从哪些方面优化
  • 加强网站建设的原因宁波seo网络推广咨询热线
  • 做网站用java互联网营销师培训教材
  • 餐饮网站建设软文范文大全
  • 做电商网站公司简介网上销售平台有哪些
  • 假如电脑的服务器关闭后做的网站还能打开吗推广赚佣金的平台
  • 政府网站集约化建设模式研究东莞营销外包公司
  • 专业网站发展趋势成都十大营销策划公司
  • 网站建设的总结200字运营推广公司
  • 查企业官网北京网优化seo优化公司
  • xxx网站建设与优化推广广州优化营商环境条例
  • 郑州flash网站建设网络营销理论
  • app要有网站做基础知识重庆今天刚刚发生的重大新闻
  • aspcms 你的网站未安装 请先安装今天实时热搜榜排名
  • 旅游小镇网站建设方案市场营销经典案例
  • seo综合查询平台官网银川网站seo
  • 表白网页生成源码百度网站排名关键词整站优化
  • 网站的图片尺寸广告投放平台都有哪些
  • 有经验的南昌网站设计seo网站营销推广公司
  • 外国电商设计网站有哪些外链是什么意思
  • 宁波网站建设报价游戏推广
  • 建设党史网站的意义自己怎么创建网站
  • 做贸易的都有什么网站二十条优化