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

网络游戏那个网站做的最好中国建设银行租赁网站

网络游戏那个网站做的最好,中国建设银行租赁网站,中小企业怎么优化网站,wordpress制作客户端访问者模式#xff08;Visitor Pattern#xff09;是一种行为型设计模式#xff0c;它将操作与对象结构分离#xff0c;使得你可以在不改变对象结构的前提下定义作用于这些对象的新操作。访问者模式通过引入一个访问者对象#xff0c;允许你在不修改类的前提下向已有类添加…访问者模式Visitor Pattern是一种行为型设计模式它将操作与对象结构分离使得你可以在不改变对象结构的前提下定义作用于这些对象的新操作。访问者模式通过引入一个访问者对象允许你在不修改类的前提下向已有类添加新的行为。 访问者模式的核心思想 访问者模式的主要思想是将对象结构的操作封装到访问者中。对象结构中的每个元素都可以接受一个访问者并让这个访问者对自己进行操作。这使得我们可以很方便地增加新的操作而不需要修改对象的类。 访问者模式的主要组成部分包括 访问者接口Visitor为每个对象结构中的元素定义访问操作。每个操作方法对应一个元素类型。 具体访问者Concrete Visitor实现访问者接口定义每个元素对应的具体操作。 元素接口Element定义接受访问者的方法。这个方法通常会将自身作为参数传递给访问者。 具体元素Concrete Element实现元素接口并在接受访问者时调用访问者的相应操作。 对象结构Object Structure通常是一个包含多个元素的集合负责遍历这些元素并让它们接受访问者。 访问者模式的应用场景 需要对类的对象结构进行复杂操作例如编译器中的语法树、绘图系统中的图形对象层次等。访问者模式允许你将复杂的操作分离出来而不影响对象结构。 不方便修改对象结构当对象结构比较稳定频繁添加新行为时访问者模式可以让你在不修改这些对象类的前提下增加新的操作。 操作与结构的分离当你希望将操作与对象结构进行解耦时访问者模式非常适用。 访问者模式的示例代码 假设我们有一个对象结构包含不同类型的形状如圆形、矩形、三角形等。我们希望对这些形状进行不同的操作例如计算面积、绘制形状等。访问者模式可以帮助我们在不修改形状类的前提下添加这些操作。 1. 定义访问者接口、元素接口和具体实现类 #include QDebug #include QString #include QList// 前向声明 class Circle; class Rectangle; class Triangle;// 访问者接口定义访问每个元素的操作 class Visitor { public:virtual void visitCircle(Circle* circle) 0;virtual void visitRectangle(Rectangle* rectangle) 0;virtual void visitTriangle(Triangle* triangle) 0;virtual ~Visitor() default; };// 元素接口定义接受访问者的方法 class Shape { public:virtual void accept(Visitor* visitor) 0;virtual ~Shape() default; };// 具体元素类圆形 class Circle : public Shape { private:int radius;public:Circle(int r) : radius(r) {}int getRadius() const {return radius;}void accept(Visitor* visitor) override {visitor-visitCircle(this); // 让访问者访问自己} };// 具体元素类矩形 class Rectangle : public Shape { private:int width, height;public:Rectangle(int w, int h) : width(w), height(h) {}int getWidth() const {return width;}int getHeight() const {return height;}void accept(Visitor* visitor) override {visitor-visitRectangle(this); // 让访问者访问自己} };// 具体元素类三角形 class Triangle : public Shape { private:int base, height;public:Triangle(int b, int h) : base(b), height(h) {}int getBase() const {return base;}int getHeight() const {return height;}void accept(Visitor* visitor) override {visitor-visitTriangle(this); // 让访问者访问自己} };// 具体访问者类计算形状面积 class AreaVisitor : public Visitor { public:void visitCircle(Circle* circle) override {int radius circle-getRadius();double area 3.14 * radius * radius;qDebug() Circle area: area;}void visitRectangle(Rectangle* rectangle) override {int area rectangle-getWidth() * rectangle-getHeight();qDebug() Rectangle area: area;}void visitTriangle(Triangle* triangle) override {double area 0.5 * triangle-getBase() * triangle-getHeight();qDebug() Triangle area: area;} };// 具体访问者类绘制形状 class DrawVisitor : public Visitor { public:void visitCircle(Circle* circle) override {qDebug() Drawing a circle with radius circle-getRadius();}void visitRectangle(Rectangle* rectangle) override {qDebug() Drawing a rectangle with width rectangle-getWidth() and height rectangle-getHeight();}void visitTriangle(Triangle* triangle) override {qDebug() Drawing a triangle with base triangle-getBase() and height triangle-getHeight();} };// 对象结构形状集合 class ShapeCollection { private:QListShape* shapes;public:void addShape(Shape* shape) {shapes.append(shape);}void accept(Visitor* visitor) {for (Shape* shape : shapes) {shape-accept(visitor); // 让每个形状接受访问者}}~ShapeCollection() {qDeleteAll(shapes);} };// 使用示例 int main() {// 创建一些形状Shape* circle new Circle(5);Shape* rectangle new Rectangle(4, 6);Shape* triangle new Triangle(3, 4);// 创建形状集合ShapeCollection shapeCollection;shapeCollection.addShape(circle);shapeCollection.addShape(rectangle);shapeCollection.addShape(triangle);// 创建访问者计算面积AreaVisitor* areaVisitor new AreaVisitor();qDebug() Calculating areas:;shapeCollection.accept(areaVisitor);// 创建访问者绘制形状DrawVisitor* drawVisitor new DrawVisitor();qDebug() \nDrawing shapes:;shapeCollection.accept(drawVisitor);// 清理内存delete areaVisitor;delete drawVisitor;return 0; }代码解析 Visitor接口定义了访问不同类型形状的操作visitCircle、visitRectangle、visitTriangle。 Shape接口定义了接受访问者的方法accept每个具体的形状都会调用访问者的相应方法并将自身传递给访问者。 具体元素类Circle、Rectangle、Triangle这些类实现了Shape接口并在accept方法中调用访问者的具体方法。 AreaVisitor和DrawVisitor类这两个具体的访问者实现了访问者接口用于计算形状的面积和绘制形状。每个访问者都提供了不同的功能而不需要修改Shape类。 ShapeCollection类这是一个对象结构包含多个Shape对象并让访问者依次访问每个形状。 访问者模式的优点 增加操作非常容易当需要对对象结构中的元素添加新的操作时只需要增加新的访问者而不需要修改已有的类这符合开闭原则。 分离关注点访问者模式将不同操作如计算面积、绘制形状等分离到不同的访问者中从而避免了将操作逻辑分散到元素类中提高了系统的可维护性。 符合单一职责原则每个访问者只专注于一种操作不会影响对象结构的定义和职责。 访问者模式的缺点 违反了依赖倒置原则访问者模式要求元素类依赖访问者接口这在某种程度上违反了依赖倒置原则。因为对象结构中的元素需要接受访问者这使得元素类必须知道访问者的存在。 增加了复杂性当对象结构中的元素种类较多时访问者接口和访问者类会变得非常庞大尤其是当每个访问者都需要实现多个访问方法时复杂度会增加。 元素类的变化困难如果对象结构中的元素类需要频繁变化如添加新的字段或属性那么每个访问者类都需要修改增加了维护成本。 适合使用访问者模式的情况 需要对类结构中的对象添加新行为如果频繁需要对类结构中的对象添加新的操作访问者模式是一个很好的选择因为你可以通过创建新的访问者来实现新行为而不需要修改原有的类。 稳定的类结构访问者模式适合对象结构较为稳定、不频繁修改的情况因为它通过增加访问者来扩展操作而不是通过修改对象结构本身。 不适合使用访问者模式的情况 对象结构频繁变化如果对象结构中的类经常发生变化例如添加新类型的元素或修改现有元素访问者模式就不太适合因为每次对象结构变化都需要修改所有访问者。 简单系统对于系统较为简单的情况访问者模式会增加不必要的复杂性。 Qt中的访问者模式应用 在Qt开发中访问者模式可以应用于复杂的UI组件、绘图系统或处理层次化对象的场景。例如Qt的绘图系统中可以有不同的图形元素如圆形、矩形等并且可能需要对这些图形元素进行不同的操作如渲染、计算面积、检测碰撞等。访问者模式可以帮助你将这些操作分离到不同的访问者中从而提高系统的灵活性。 总结 访问者模式通过将操作与对象结构分离使得你可以在不修改类结构的前提下增加新的操作。它非常适合那些对象结构相对稳定但需要频繁添加操作的场景。尽管访问者模式在扩展新操作时非常灵活但当对象结构变化较频繁时可能会增加维护的复杂性。
http://www.hkea.cn/news/14411706/

相关文章:

  • 建网站方案前端官网模板
  • 怎样找到黄页网站wordpress发文章设置文字大小
  • 网站制作 网站台州网站制作网页
  • 商城网站源代码舟山论坛网
  • 建设网站的申请代理小企业网站建设
  • 手机网站建设服务哪家好公司网站怎么选
  • 广东网站建设公学生心理健康网站建设论文
  • 景德镇做网站哪家好公司网站建设建设
  • 农村电商扶贫网站建设比特币网站建设
  • 做进口零食网站网站设计宽屏
  • 导购分享网站模板网站备案名 企业名
  • 平谷网站建设公司学做网站的视频
  • 广州商务网站建设电话网站建设sem
  • 做的公司网站风格跟样式和别人一样做网站 推广
  • 网站服务器申请高埗仿做网站
  • 可不可以建网站做微商一个女装店网站建设的策划模板
  • 做练习题的网站建筑行业的公司有哪些
  • 做设计赚钱的网站叫人做网站多少钱
  • 沈阳网站建设开发深圳微信网站运营
  • 建设企业网站有什么好处wordpress防注册
  • 公司网站建设注意phpwind 手机网站模板
  • 山东网页制作网站北京互联网金融公司排名
  • 读经典做临床报名网站网站建站网站哪家好
  • 免费的网站建造建立网站例题
  • 如何做手机app开发长春seo公司
  • 做视频网站的服务器什么是网站内页
  • 网站建设设计制作 熊掌号域名服务器查询
  • 毕设做网站怎么命题建设部网站 合同格式
  • 网站开发语言开发网站宝建站助手
  • 做网站还需要买空间吗境外服务器代理平台