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

网站要实名认证旅游网站建设方案之目标

网站要实名认证,旅游网站建设方案之目标,搞笑网站建设目的和意义,徐州百度seo排名优化文章目录工厂方法模式简介工厂方法模式定义工厂方法模式结构工厂方法模式代码实例定义抽象产品类AbstractSportProduct,方法不提供实现定义三个具体产品类定义抽象工厂类AbstractFactory,方法为纯虚方法定义三个具体工厂类客户端使用方法示例运行结果工厂…

文章目录

  • 工厂方法模式简介
  • 工厂方法模式定义
  • 工厂方法模式结构
  • 工厂方法模式代码实例
    • 定义抽象产品类AbstractSportProduct,方法不提供实现
    • 定义三个具体产品类
    • 定义抽象工厂类AbstractFactory,方法为纯虚方法
    • 定义三个具体工厂类
    • 客户端使用方法示例
    • 运行结果
  • 工厂方法模式总结

在介绍简单工厂方法模式时Jungle总结出简单工厂模式存在最大的问题是违背了“开闭原则”,每当增加新的产品时,需要修改工厂类的逻辑。为了规避这种不足,同时很好的利用简单工厂模式的优点,本节Jungle将声情并茂地为您奉上工厂方法模式。

为了解决简单工厂模式的这两个弊端,工厂方法模式应运而生,它规定每个产品都有一个专属工厂。比如苹果有专属的苹果工厂,梨子有专属的梨子工厂

工厂方法模式简介

简单工厂模式中,每新增一个具体产品,就需要修改工厂类内部的判断逻辑。为了不修改工厂类,遵循开闭原则,工厂方法模式中不再使用工厂类统一创建所有的具体产品,而是针对不同的产品设计了不同的工厂,每一个工厂只生产特定的产品

工厂方法模式定义

工厂方法模式:
定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。

工厂方法模式结构

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

工厂方法模式代码实例

考虑这样一个场景,如下图:
在这里插入图片描述
Jungle想要进行户外运动,它可以选择打篮球、踢足球或者玩排球。和上一次的体育保管室不同,这次分别由篮球保管室、足球保管室和排球保管室.
Jungle只需直接去相应的保管室就可以拿到对应的球!然后Jungle就可以愉快地玩耍了。

定义抽象产品类AbstractSportProduct,方法不提供实现

//抽象产品类AbstractProduct
class AbstractSportProduct
{
public:AbstractSportProduct(){}virtual ~AbstractSportProduct(){}//抽象方法:virtual void printName() = 0;virtual void play(){} = 0;
};

定义三个具体产品类

//具体产品类Basketball
class Basketball :public AbstractSportProduct
{
public:Basketball(){printName();play();}//具体实现方法void printName(){printf("Jungle get Basketball\n");}void play(){printf("Jungle play Basketball\n\n");}
};//具体产品类Football
class Football :public AbstractSportProduct
{
public:Football(){printName();play();}//具体实现方法void printName(){printf("Jungle get Football\n");}void play(){printf("Jungle play Football\n\n");}
};//具体产品类Volleyball
class Volleyball :public AbstractSportProduct
{
public:Volleyball(){printName();play();}//具体实现方法void printName(){printf("Jungle get Volleyball\n");}void play(){printf("Jungle play Volleyball\n\n");}
};

定义抽象工厂类AbstractFactory,方法为纯虚方法

//抽象工厂类
class AbstractFactory
{
public:virtual AbstractSportProduct *getSportProduct() = 0;virtual ~AbstractFactory(){}
};

定义三个具体工厂类

/具体工厂类BasketballFactory
class BasketballFactory :public AbstractFactory
{
public:BasketballFactory(){printf("BasketballFactory\n");}AbstractSportProduct *getSportProduct(){printf("basketball");return new Basketball();}
};//具体工厂类FootballFactory
class FootballFactory :public AbstractFactory
{
public:FootballFactory(){printf("FootballFactory\n");}AbstractSportProduct *getSportProduct(){return new Football();}
};//具体工厂类VolleyballFactory
class VolleyballFactory :public AbstractFactory
{
public:VolleyballFactory(){printf("VolleyballFactory\n");}AbstractSportProduct *getSportProduct(){return new Volleyball();}
};

客户端使用方法示例

#include <iostream>
#include "FactoryMethod.h"int main()
{printf("工厂方法模式\n");//定义工厂类对象和产品类对象AbstractFactory *fac = nullptr;AbstractSportProduct *product = nullptr;fac = new BasketballFactory();product = fac->getSportProduct();delete fac;fac = nullptr;delete product;product = nullptr;fac = new FootballFactory();product = fac->getSportProduct();delete fac;fac = nullptr;delete product;product = nullptr;fac = new VolleyballFactory();product = fac->getSportProduct();	delete fac;fac = nullptr;delete product;product = nullptr;system("pause");return 0;
}

运行结果

在这里插入图片描述

工厂方法模式总结

如果Jungle想玩棒球(Baseball),只需要增加一个棒球工厂(BaseballFacory),然后在客户端代码中修改具体工厂类的类名,而原有的类的代码无需修改。由此可看到,相较简单工厂模式,工厂方法模式更加符合开闭原则。工厂方法是使用频率最高的设计模式之一,是很多开源框架和API类库的核心模式。

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

http://www.dtcms.com/a/446062.html

相关文章:

  • [ SpringWeb ] 搭建和配置
  • 高层次综合hls设计第一章
  • Docker 启动 Easysearch 时自定义初始密码的几种方式
  • 15.C++三大重要特性之继承
  • AI 训练大显存配置实战:24G 显存(RTX 4090)如何配 32G 内存?—— 从 “显存挪用” 到 “效率翻倍”
  • JVM即时编译
  • 【JVM】——结构组成和垃圾回收
  • 建站模板推荐设计公司的企业使命
  • php网站怎么做百度做网站不给FTP密码
  • 自由学习记录(105)
  • 聚类之KMeans
  • 汽车企业管理系统自己的网站怎么做关键词优化
  • 大模型落地的四大核心引擎:从技术突破到产业重构
  • find 命令使用介绍
  • 蓝桥杯Python备考全攻略:从入门到精通
  • 数据结构初阶(第六讲)单链表的功能实现
  • 做付费推广哪个网站好工作室网页模板
  • 合川网站建设天津自助建站
  • 元模型训练中平衡历史数据与实时市场变化的关系
  • 新手直播冷场难破?场景模拟工具解决测试与练手难题
  • 半球陀螺仪吸气剂热激活真空共晶炉
  • C++多态特性详解
  • 嵌入式第六十七天(SPI子系统架构)
  • MVC 视图
  • 公司网站运营方案东莞市建设工程检测中心网站
  • 从 C 到 C++:用 C 语言思维理解面向对象四大特性
  • SOFA 架构--02--核心中间件与工具
  • 如何利用淘宝建设网站挣钱在线注册个体工商户
  • 近世代数(抽象代数)详细笔记--域
  • 计算机网络第四章(5)——网络层《路由协议+路由协议》