每日C++小程序小研究·3·2023.7.26

这篇具有很好参考价值的文章主要介绍了每日C++小程序小研究·3·2023.7.26。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今日研究c++简单的设计模式;

1.单例模式:

        单例模式是一种保证一个类只有一个实例的设计模式。

        常见的实现方式有两种:饿汉式和懒汉式。

        饿汉式:在类初始化时就已经创建了实例;

        懒汉式:则在需要时才创建实例。

        单例模式可以保证系统中只有一个实例,从而避免了频繁地创建对象,提高了系统的性能。

2.工厂模式:

 2.1简单工厂模式:

在这个示例中,Shape 是一个接口类,Circle 和 Rectangle 是具体的类。ShapeFactory 是工厂类,它根据传入的类型参数创建相应的对象并返回。在 main 函数中,我们通过 ShapeFactory::createShape 方法创建了两个不同的对象,并调用它们的 draw 方法来执行相应的操作。

以下是一个简单的 C++ 工厂模式示例代码:

c++
#include <iostream>
using namespace std;

// 接口类
class Shape {
public:
    virtual void draw() = 0;
};

// 具体类
class Circle : public Shape {
public:
    void draw() {
        cout << "Drawing Circle" << endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() {
        cout << "Drawing Rectangle" << endl;
    }
};

// 工厂类
class ShapeFactory {
public:
    static Shape* createShape(string type) {
        if (type == "Circle") {
            return new Circle();
        } else if (type == "Rectangle") {
            return new Rectangle();
        }
        return nullptr;
    }
};

int main() {
    Shape* shape1 = ShapeFactory::createShape("Circle");
    shape1->draw();

    Shape* shape2 = ShapeFactory::createShape("Rectangle");
    shape2->draw();

    return 0;
}

2.2 抽象工厂模式:


在这个示例中,Shape 是接口类,Circle、Rectangle和square是具体的类。Factory 是抽象工厂类,它定义了创建产品的接口。CircleFactory、RectangleFactory和squareFactory是具体的工厂类,它们分别创建不同的产品类。Client 是客户端类,它通过工厂方法创建产品并使用。在 main 函数中,我们创建了三个不同的客户端对象,并分别使用它们创建了不同的产品对象。

以下是一个简单的抽象工厂模式 C++ 代码示例:

c++
#include <iostream>
using namespace std;

// 接口类
class Shape {
public:
    virtual void draw() = 0;
};

// 具体产品类
class Circle : public Shape {
public:
    void draw() {
        cout << "Drawing Circle" << endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() {
        cout << "Drawing Rectangle" << endl;
    }
};

class Square : public Shape {
public:
    void draw() {
        cout << "Drawing Square" << endl;
    }
};

// 抽象工厂类
class Factory {
public:
    virtual Shape* createShape() = 0;
};

// 具体工厂类
class CircleFactory : public Factory {
public:
    Shape* createShape() {
        return new Circle();
    }
};

class RectangleFactory : public Factory {
public:
    Shape* createShape() {
        return new Rectangle();
    }
};

class SquareFactory : public Factory {
public:
    Shape* createShape() {
        return new square();
    }
};

// 客户端类
class Client {
private:
    Factory* factory;
public:
    Client(Factory* factory) {
        this->factory = factory;
    }

    void useShape() {
        Shape* shape = factory->createShape();
        shape->draw();
    }
};

int main() {
    CircleFactory* circleFactory = new CircleFactory();
    Client* circleClient = new Client(circleFactory);
    circleClient->useShape(); // 输出 "Drawing Circle"

    RectangleFactory* rectangleFactory = new RectangleFactory();
    Client* rectangleClient = new Client(rectangleFactory);
    rectangleClient->useShape(); // 输出 "Drawing Rectangle"

    squareFactory* squareFactory = new squareFactory();
    Client* squareClient = new Client(squareFactory);
    squareClient->useShape(); // 输出 "Drawing square"

    delete circleClient;
    delete rectangleClient;
    delete squareClient;
    delete circleFactory;
    delete rectangleFactory;
    delete squareFactory;

    return 0;
}

3.适配器模式 

 
在示例中,我们有一个目标接口 ITarget,一个适配者类 Adaptee,以及一个适配器类 Adapter。适配器类实现了目标接口,并持有一个适配者对象的指针。在适配器类的 targetMethod 方法中,它调用适配者对象的 targetMethod 方法来实现适配器功能。

在客户端代码中,我们首先创建一个适配者对象,然后创建一个适配器对象,并将适配者对象传入适配器构造函数的参数中。最后,我们调用适配器对象的 targetMethod 方法,实际上是调用适配者对象的 targetMethod 方法。文章来源地址https://www.toymoban.com/news/detail-606188.html

以下是一个简单的适配器模式的C++代码示例:

c++
#include <iostream>
using namespace std;

// 目标接口
class ITarget {
    void targetMethod();
};

// 适配者类
class Adaptee : public ITarget {
public:
    void targetMethod() {
        cout << "Adaptee's targetMethod" << endl;
    }
};

// 适配器类
class Adapter : public ITarget {
public:
    Adapter(Adaptee *adaptee) : m_adaptee(adaptee) {}

    void targetMethod() {
        m_adaptee->targetMethod();
    }

private:
    Adaptee *m_adaptee;
};

// 客户端代码
int main() {
    // 创建一个适配者对象
    Adaptee adaptee;

    // 创建一个适配器对象,并将适配者对象传入适配器构造函数
    Adapter adapter(&adaptee);

    // 调用适配器的方法,实际上是调用适配者的方法
    adapter.targetMethod();

    return 0;
}

到了这里,关于每日C++小程序小研究·3·2023.7.26的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-5-26 LeetCode每日一题(二进制矩阵中的最短路径)

    点击跳转到题目位置 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求: 路径途

    2024年02月06日
    浏览(55)
  • AIGC产业研究报告2023——语言生成篇

    易观: 今年以来,随着人工智能技术不断实现突破迭代,生成式AI的话题多次成为热门,而人工智能内容生成(AIGC)的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性和发展趋势,易观对AIGC产业进行了探索并将发布AIGC产

    2024年02月12日
    浏览(24)
  • LeetCode每日一题:56. 合并区间(2023.8.27 C++)

    目录 56. 合并区间 题目描述: 实现代码与解析: 排序 + 贪心 原理思路:         以数组  intervals  表示若干个区间的集合,其中单个区间为  intervals[i] = [starti, endi]  。请你合并所有重叠的区间,并返回  一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间  。

    2024年02月11日
    浏览(32)
  • Leetcode每日一题:15. 三数之和(2023.7.9 C++)

    目录 15. 三数之和 题目描述: 实现代码与解析: 双指针 原理思路:         给你一个整数数组  nums  ,判断是否存在三元组  [nums[i], nums[j], nums[k]]  满足  i != j 、 i != k  且  j != k  ,同时还满足  nums[i] + nums[j] + nums[k] == 0  。请 你返回所有和为  0  且不重复的三元组

    2024年02月13日
    浏览(33)
  • Leetcode每日一题:2681. 英雄的力量(2023.8.1 C++)

    目录 2681. 英雄的力量 题目描述: 实现代码与解析: 数学规律 原理思路:         给你一个下标从  0  开始的整数数组  nums  ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的  力量  定义为: i0  , i1  ,...  ik  表示这组英雄在数组中的下标。那么这

    2024年02月13日
    浏览(25)
  • Leetcode每日一题:18. 四数之和(2023.7.15 C++)

    目录 18. 四数之和 题目描述: 实现代码与解析: 双指针 原理思路:         给你一个由  n  个整数组成的数组  nums  ,和一个目标值  target  。请你找出并返回满足下述全部条件且 不重复 的四元组  [nums[a], nums[b], nums[c], nums[d]]  (若两个四元组元素一一对应,则认为

    2024年02月16日
    浏览(48)
  • LeetCode每日一题:2594. 修车的最少时间(2023.9.7 C++)

    目录 2594. 修车的最少时间 题目描述: 实现代码与解析: 二分 原理思路:         给你一个整数数组  ranks  ,表示一些机械工的  能力值  。 ranksi  是第  i  位机械工的能力值。能力值为  r  的机械工可以在  r * n2  分钟内修好  n  辆车。 同时给你一个整数  cars

    2024年02月09日
    浏览(37)
  • Leetcode每日一题:931. 下降路径最小和(2023.7.13 C++)

    目录 931. 下降路径最小和 题目描述: 实现代码与解析: 动态规划 原理思路:         给你一个  n x n  的  方形  整数数组  matrix  ,请你找出并返回通过  matrix  的 下降路径   的   最小和  。 下降路径  可以从第一行中的任何元素开始,并从每一行中选择一个元素

    2024年02月16日
    浏览(38)
  • LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

    目录 1921. 消灭怪物的最大数量 题目描述: 实现代码与解析: 贪心 原理思路:         你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个  下标从 0 开始  且长度为  n  的整数数组  dist  ,其中  dist[i]  是第  i  个怪物与城市的  初始距离 (

    2024年02月10日
    浏览(35)
  • Leetcode每日一题:1444. 切披萨的方案数(2023.8.17 C++)

    目录 1444. 切披萨的方案数 题目描述: 实现代码与解析: 二维后缀和  + 动态规划 原理思路:         给你一个  rows x cols  大小的矩形披萨和一个整数  k  ,矩形包含两种字符:  \\\'A\\\'  (表示苹果)和  \\\'.\\\'  (表示空白格子)。你需要切披萨  k-1  次,得到  k  块披萨

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包