c++ 创建型设计模式工厂方法Factory Method示例详解

 更新时间:2023年09月06日 11:50:08   作者:菜皮日记  
这篇文章主要为大家介绍了c++ 创建型设计模式工厂方法Factory Method示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

简介

工厂方法中,每一个具体工厂类都对应创建一个具体产品类,所有具体工厂类都实现抽象工厂,所有具体产品类都实现抽象产品。

抽象工厂定义了创建抽象产品的方法签名,具体工厂类各自实现各自逻辑,来创建具体的产品。

角色

  • 抽象工厂 Abstract Factory

    定义创建产品的方法签名,即Factory Method

  • 抽象产品 Abstract Product

    定义产品的基本属性

  • 具体工厂 Concrete Factory

    实现自抽象工厂,并实现 Factory Method,实现如何创建具体产品。

  • 具体产品 Concrete Product

    实现具体产品基本属性

类图

如图所示,Dialog抽象工厂可以创建Button抽象产品,WindowsDialog和WebDialog都是具体工厂,负责创建WindownsButton和HTMLButton。

代码

abstract class Creator
{
    abstract public function factoryMethod(): Product;
    public function someOperation(): string
    {
        $product = $this->factoryMethod();
        $result = "Creator: The same creator's code has just worked with " . $product->operation();
        return $result;
    }
}
class ConcreteCreator1 extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProduct1();
    }
}
class ConcreteCreator2 extends Creator
{
    public function factoryMethod(): Product
    {
        return new ConcreteProduct2();
    }
}
interface Product
{
    public function operation(): string;
}
class ConcreteProduct1 implements Product
{
    public function operation(): string
    {
        return "{Result of the ConcreteProduct1}";
    }
}
class ConcreteProduct2 implements Product
{
    public function operation(): string
    {
        return "{Result of the ConcreteProduct2}";
    }
}
function clientCode(Creator $creator)
{
    echo "Client: I'm not aware of the creator's class, but it still works.\n" . $creator->someOperation() . "\n";
}
echo "App: Launched with the ConcreteCreator1.\n";
clientCode(new ConcreteCreator1());
echo "App: Launched with the ConcreteCreator2.\n";
clientCode(new ConcreteCreator2());

output

App: Launched with the ConcreteCreator1.
Client: I'm not aware of the creator's class, but it still works.
Creator: The same creator's code has just worked with {Result of the ConcreteProduct1}
App: Launched with the ConcreteCreator2.
Client: I'm not aware of the creator's class, but it still works.
Creator: The same creator's code has just worked with {Result of the ConcreteProduct2}

以上就是c++ 创建型设计模式工厂方法Factory Method示例详解的详细内容,更多关于c++ Factory Method的资料请关注脚本之家其它相关文章!

相关文章

  • C语言获取文件大小的两种方式

    C语言获取文件大小的两种方式

    因为音视频开发的需要,经常会写一些文件输入输出的测试程序,常常用到获取文件大小的函数,本篇文章就记录一下常用的两种获取文件大小的方式,希望对大家有所帮助
    2023-11-11
  • C++合并二叉树的思路与示例代码

    C++合并二叉树的思路与示例代码

    二叉树大家应该都不陌生,但是合并二叉树呢?这篇文章主要给大家介绍了关于C++合并二叉树的相关资料,文中给出了两种解决的方法,大家可以根据需要选择对应的方法,需要的朋友可以参考下
    2021-08-08
  • C++实现LeetCode(106.由中序和后序遍历建立二叉树)

    C++实现LeetCode(106.由中序和后序遍历建立二叉树)

    这篇文章主要介绍了C++实现LeetCode(106.由中序和后序遍历建立二叉树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现LeetCode(37.求解数独)

    C++实现LeetCode(37.求解数独)

    这篇文章主要介绍了C++实现LeetCode(37.求解数独),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++ ffmpeg实现将视频帧转换成jpg或png等图片

    C++ ffmpeg实现将视频帧转换成jpg或png等图片

    有时播放实时流的时候有截图的需求,需要将解码出来的图片保存本地或上传服务器,这时就需要将avframe中的数据编码成png、jpg等格式的图片,我们使用ffmpeg的相关编码器就可以实现功能,下面就来讲讲具体实现方法吧
    2023-03-03
  • 一文详解C++11中的lambda函数

    一文详解C++11中的lambda函数

    小编可以明确告诉大家:lambda函数是C++11中最重要的,使用最广泛的,最具现代风格的内容,lambda函数的出现改变了C++编程的思维方式。所以快和小编学习一下C++11中lambda函数的使用吧
    2023-02-02
  • C++数据结构继承的概念与菱形继承及虚拟继承和组合

    C++数据结构继承的概念与菱形继承及虚拟继承和组合

    今天我要给大家介绍C++中更深入的内容了。C++这门语言为了使代码不冗余,做了些什么操作呢?C++的继承就很好地实现了类层次的代码复用,今天我就要来和大家好好聊一聊它了
    2022-02-02
  • 详解C++中动态内存管理和泛型编程

    详解C++中动态内存管理和泛型编程

    这篇文章主要为大家详细介绍了C++中动态内存管理和泛型编程的相关资料,文中示例代码讲解详细,对我们学习C++具有一定帮助,感兴趣的小伙伴快跟随小编一起学习一
    2022-10-10
  • 基于Qt实现电子木鱼小游戏

    基于Qt实现电子木鱼小游戏

    今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在网上看了一下基本上都是用py和Java写的,所以我用QT重新写了一下,作为小白练手项目非常适合,快跟随小编一起学习一下吧
    2023-01-01
  • C语言中函数返回字符串的方法汇总

    C语言中函数返回字符串的方法汇总

    C语言返回字符串函数共有四种方式,分别如下:使用堆空间,返回申请的堆地址,注意释放、函数参数传递指针,返回该指针、返回函数内定义的静态变量(共享)、返回全局变量
    2017-05-05

最新评论