Strategy设计模式

server/2024/9/23 17:42:33/

Strategy设计模式举例。

看图:
在这里插入图片描述

代码实现:

#include <iostream>using namespace std;class FlyBehavior {
public:virtual void fly() = 0;
};class QuackBehavior {
public:virtual void quack() = 0;
};class FlyWithWings :public FlyBehavior {
public:void fly() { cout << "fly with wings!" << endl; }
};class FlyNoWay :public FlyBehavior {
public:void fly() { cout << "can not fly!" << endl; }
};class Quack :public QuackBehavior {
public:void quack() { cout << "gaga!" << endl; }
};class Squeak :public QuackBehavior {
public:void quack() { cout << "fricktion !" << endl; }
};class QuackNoWay :public QuackBehavior {
public :void quack() { cout << "can not sound!" << endl; }
};class Duck {
protected:FlyBehavior *flyBehavior;QuackBehavior *quackBehavior;
public:void fly() { flyBehavior->fly(); }void quack() { quackBehavior->quack(); }virtual void display() = 0;};class RubberDuck :public Duck {
public:RubberDuck() {flyBehavior = new FlyNoWay;quackBehavior = new Squeak;}void display() { cout <<"rubber duck" << endl; };
};

细节:

  1. 在Duck类中,new的是虚类(virtual)或者虚方法类,而在RubberDuck中new的是实类。接下来,调用实类的方法时,会根据不同的实类调用不同的实方法。
  2. new FlyNoWay 也可以写成new FlyNoWay(),但是最好写成new FlyNoWay()。
  3. 结合本例,图中的聚合/集合该如何理解?

http://www.ppmy.cn/server/46370.html

相关文章

Java高级---Spring Boot---4核心概念

4 核心概念 4.1 Spring Boot的自动配置详解 自动配置 是 Spring Boot 的核心特性之一&#xff0c;它允许框架根据项目中添加的依赖自动配置应用程序。 EnableAutoConfiguration: 这个注解是自动配置的入口点&#xff0c;它告诉 Spring Boot 根据类路径上的库来自动配置 Spri…

c++学习----初识类和对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成。…

Python自然语言处理(NLP)库之NLTK使用详解

概要 自然语言处理(NLP)是人工智能和计算机科学中的一个重要领域,涉及对人类语言的计算机理解和处理。Python的自然语言工具包(NLTK,Natural Language Toolkit)是一个功能强大的NLP库,提供了丰富的工具和数据集,帮助开发者进行各种NLP任务,如分词、词性标注、命名实体…

江苏大信环境科技有限公司:环保领域的开拓者与引领者

2009 年&#xff0c;江苏大信环境科技有限公司在宜兴环保科技工业园成立。自创立之始&#xff0c;该公司便笃定坚守“诚信为本、以质量求生存、以创新谋发展”这一经营理念&#xff0c;全力以赴为客户构建专业的工业有机废气治理整体解决方案&#xff0c;进而成为国家高新技术企…

Kotlin 枚举类

文章目录 定义构造函数普通成员抽象成员when 分支判定 定义 枚举类可枚举出一系列对象&#xff0c;使用enum修饰&#xff0c;在其内部只需要写出枚举对象的名称&#xff0c;用逗号,分割即可&#xff08;这里的Red、Green和Blue都是PrimaryColor类型的枚举对象&#xff09;。 …

【Python从入门到进阶】56、Mysql防止SQL注入及ORM库简化操作

接上篇《55、使用Python轻松操作Mysql数据库》 上一篇我们讲解了Mysql的基本链接和增删改查&#xff0c;本篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM&#xff08;对象关系映射&#xff09;库简化操作的内容。 一、参数化查询与防止SQL注入 在数据库操作中&…

携手亚马逊云科技,神州泰岳如何打通生成式AI落地最后三公里

导读&#xff1a;神州泰岳成为首批获得亚马逊云科技生成式AI能力认证的合作伙伴。 “过去6年来&#xff0c;在与亚马逊云科技的合作过程中&#xff0c;我们大概签约了300家以上的中国出海企业。”近日在一次沟通会上&#xff0c;神州泰岳副总裁兼云事业部总经理刘家歆这样向媒…

面试题:SpringBoot启动流程

具体步骤 新建一个Spring应用程序 (new springApplication())&#xff1a; 确认web应用的类型加载ApplicationContextInitializer加载ApplicationListener记录主启动类 运行应用程序&#xff08;.run&#xff09;&#xff1a; 准备环境对象Environment&#xff0c;用于加载…