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++ 在堆上开辟与释放二维、三维指针详细解析

    一维指针其实就相当于一维数组,不用去看书上所说的数组在内存中的首地址这些晦涩的话,以此类推 二维指针就相当于二维数组,新手对一维数组的开辟与释放比较容易熟悉
    2013-09-09
  • C++链表实现通讯录设计

    C++链表实现通讯录设计

    这篇文章主要为大家详细介绍了C++链表实现通讯录设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++实现Dijkstra算法的示例代码

    C++实现Dijkstra算法的示例代码

    迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法。本文将用C++实现Dijkstra算法,需要的可以参考一下
    2022-07-07
  • C语言二叉树的非递归遍历实例分析

    C语言二叉树的非递归遍历实例分析

    这篇文章主要介绍了C语言二叉树的非递归遍历,包括了先序遍历、中序遍历与后序遍历,需要的朋友可以参考下
    2014-09-09
  • C语言编程大小端问题示例详解教程

    C语言编程大小端问题示例详解教程

    这篇文章主要为大家介绍了C语言编程大小端问题解决的示例内容详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • C++ 将文件数据一次性加载进内存实例代码

    C++ 将文件数据一次性加载进内存实例代码

    这篇文章主要介绍了C++ 将文件数据一次性加载进内存实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++强制类型转换的四种方式

    C++强制类型转换的四种方式

    本文主要介绍了C++强制类型转换的四种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 使用C语言实现vector动态数组的实例分享

    使用C语言实现vector动态数组的实例分享

    vector是指能够存放任意类型的动态数组,而C语言中并没有面向对象的C++那样内置vector类,所以我们接下来就来看一下使用C语言实现vector动态数组的实例,需要的朋友可以参考下
    2016-05-05
  • C语言中单引号和双引号用法详解

    C语言中单引号和双引号用法详解

    C语言中,单引号用于表示单个字符常量,而双引号用于表示字符串,单引号中的字符是int类型,双引号中的字符串是以null字符结尾的字符数组,本文介绍C语言中单引号和双引号用法,感兴趣的朋友一起看看吧
    2025-01-01
  • C++中的sort与自定义排序详解

    C++中的sort与自定义排序详解

    std::sort是C++模板函数,采用内省排序(混合快速、堆、插入排序)动态优化性能,确保O(nlogn)效率与鲁棒性,通过比较器、Lambda或重载运算符实现自定义排序逻辑
    2025-08-08

最新评论