【C#设计模式(2)——工厂模式】

前言

工厂模式:使用工厂创建对象。

工厂模式的主要目的是分离对象的创建与调用,通过使用工厂统一管理对象的创建。工厂模式可以隐藏对象的创建细节,使客户终端代码只关注使用对象而不需要关注对象的创建过程。

运行结果

在这里插入图片描述

代码

#region 食品
//食品接口
public interface IFood
{void CreateFood();      //创建食品void SetManufacturer(string manufacturer);  //设置制造商
}
// 食品类
public class Food
{protected string Name { get; set; }protected string Manufacturer { get; set; }protected string Description { get; set; }
}// 具体罐头食品类:继承食品类,实现食品接口。
public class ConcreteCannedFood : Food, IFood
{public ConcreteCannedFood(string name, string description){Name = name;Description = description;}public void CreateFood(){Console.WriteLine($"【食品名称】:{Name}.");Console.WriteLine($"【生产厂商】:{Manufacturer}.");Console.WriteLine($"【食品描述】:{Description}.");Console.WriteLine();}public void SetManufacturer(string manufacturer){Manufacturer = manufacturer;}
}
#endregion#region 食品工厂
// 工厂接口
public interface IFactory
{IFood ProduceFood(string name);	//生产食品
}
// 工厂类
public class Factory
{protected string Name { get; set; }
}
// 罐头食品工厂类
public class CannedFoodFactory : Factory, IFactory
{public CannedFoodFactory(string name){this.Name = name;Console.WriteLine($"【{this.Name}】开始生产...");Console.WriteLine("-----------------------------------------------------");}public IFood ProduceFood(string name){IFood food =null;switch (name){case FoodList.苹果罐头:food = new ConcreteCannedFood(FoodList.苹果罐头, FoodList.苹果罐头描述);break;case FoodList.橙子罐头:food = new ConcreteCannedFood(FoodList.橙子罐头, FoodList.橙子罐头描述);break;case FoodList.黄桃罐头:food = new ConcreteCannedFood(FoodList.黄桃罐头, FoodList.黄桃罐头描述);break;case FoodList.凤梨罐头:food = new ConcreteCannedFood(FoodList.凤梨罐头, FoodList.凤梨罐头描述);break;case FoodList.菠萝罐头:food = new ConcreteCannedFood(FoodList.菠萝罐头, FoodList.菠萝罐头描述);break;case FoodList.草莓罐头:food = new ConcreteCannedFood(FoodList.草莓罐头, FoodList.草莓罐头描述);break;case FoodList.樱桃罐头:food = new ConcreteCannedFood(FoodList.樱桃罐头, FoodList.樱桃罐头描述);break;case FoodList.葡萄罐头:food = new ConcreteCannedFood(FoodList.葡萄罐头, FoodList.葡萄罐头描述);break;case FoodList.橘子罐头:food = new ConcreteCannedFood(FoodList.橘子罐头, FoodList.橘子罐头描述);break;case FoodList.柠檬罐头:food = new ConcreteCannedFood(FoodList.柠檬罐头, FoodList.柠檬罐头描述);break;default:return null;}food.SetManufacturer(this.Name);food.CreateFood();return food;}
}
#endregion#region 清单
/// <summary>
/// 食品清单
/// </summary>
public class FoodList
{public const string 苹果罐头 = "苹果罐头";public const string 橙子罐头 = "橙子罐头";public const string 黄桃罐头 = "黄桃罐头";public const string 凤梨罐头 = "凤梨罐头";public const string 菠萝罐头 = "菠萝罐头";public const string 草莓罐头 = "草莓罐头";public const string 樱桃罐头 = "樱桃罐头";public const string 葡萄罐头 = "葡萄罐头";public const string 橘子罐头 = "橘子罐头";public const string 柠檬罐头 = "柠檬罐头";public const string 苹果罐头描述 = "苹果罐头由苹果、白砂糖、柠檬汁等原材料制成,具有补充营养、提供能量、促进消化等功效";public const string 橙子罐头描述 = "橙子罐头采用新鲜橙子制成,富含维生素C,具有增强免疫力、清新口气的效果。";public const string 黄桃罐头描述 = "黄桃罐头由成熟的桃子制成,口感鲜美,含有丰富的维生素和矿物质,有助于美容养颜。";public const string 凤梨罐头描述 = "凤梨罐头选用新鲜梨子,清甜可口,具有润肺止咳、清热解毒的功效。";public const string 菠萝罐头描述 = "菠萝罐头由新鲜菠萝制成,酸甜可口,含有丰富的维生素C和纤维素,有助于消化。";public const string 草莓罐头描述 = "草莓罐头采用新鲜草莓,色泽鲜艳,味道甜美,富含抗氧化剂,有助于抗衰老。";public const string 樱桃罐头描述 = "樱桃罐头由新鲜樱桃制成,口感酸甜,富含维生素和矿物质,有助于改善睡眠。";public const string 葡萄罐头描述 = "葡萄罐头选用新鲜葡萄,味道鲜美,含有丰富的抗氧化剂,有助于保护心脏健康。";public const string 橘子罐头描述 = "橘子罐头由新鲜橘子制成,口感酸甜,富含维生素C,具有促进消化、增强免疫力的功效。";public const string 柠檬罐头描述 = "柠檬罐头采用新鲜柠檬制成,酸味浓郁,富含维生素C,有助于清新口气和美容养颜。";
}
/// <summary>
/// 工厂清单
/// </summary>
public class FactoryList
{public const string 温州罐头厂 = "温州罐头厂";public const string 广州罐头厂 = "广州罐头厂";public const string 北京罐头厂 = "北京罐头厂";public const string 上海罐头厂 = "上海罐头厂";public const string 深圳罐头厂 = "深圳罐头厂";
}/** 工厂模式:使用工厂创建对象*/internal class Program{static void Main(string[] args){IFactory factory1 = new CannedFoodFactory(FactoryList.北京罐头厂);IFood food1 = factory1.ProduceFood(FoodList.苹果罐头);IFood food2 = factory1.ProduceFood(FoodList.黄桃罐头);IFood food3 = factory1.ProduceFood(FoodList.凤梨罐头);IFood food4 = factory1.ProduceFood(FoodList.柠檬罐头);IFactory factory2 = new CannedFoodFactory(FactoryList.温州罐头厂);IFood food11 = factory2.ProduceFood(FoodList.苹果罐头);IFood food12 = factory2.ProduceFood(FoodList.黄桃罐头);IFood food13 = factory2.ProduceFood(FoodList.草莓罐头);IFood food14 = factory2.ProduceFood(FoodList.菠萝罐头);Console.ReadLine();Console.ReadLine();}}
#endregion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10337.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Dockerfile

1. Dockerfile 简介 1.1 什么是Dockerfile Dockerfile是一个用于定义和构建Docker镜像的文本文件&#xff0c;它通过一系列指令和参数来描述镜像的构建过程和配置。这些指令包括基础镜像、软件包安装、文件拷贝、环境变量设置等&#xff0c;使得应用程序及其依赖项可以被打包…

VBA高级应用30例应用3在Excel中的ListObject对象:插入行和列

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

C++OJ_二叉树的层序遍历

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C_OJ 小伞的主页&#xff1a;xiaosan_blog 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff0…

ctfshow-web入门-反序列化(web265-web270)

目录 1、web265 2、web266 3、web267 4、web268 5、web269 6、web270 1、web265 很简单的一个判断&#xff0c;满足 $this->token$this->password; 即可 由于 $ctfshow->tokenmd5(mt_rand()) 会将 token 随机为一个 md5 值&#xff0c;我们使用 & 绕一下&am…

【STL】queue,stack的底层实现

在前面的介绍中我们已经知道了queue和stack是一个容器适配器&#xff0c;它并没有被划分到容器的行列&#xff0c;它只是对其他容器的再封装&#xff0c;在STL中queue和stack默认使用的容器是deque 在数据结构的学习中&#xff0c;我们知道stack和queue可以使用顺序表和链表实现…

Tomcat安装和配置(超详细)

一、Tomcat安装准备 1、tomcat下载 1.1、百度网盘链接下载 链接&#xff1a;https://pan.baidu.com/s/1uceOKe_QcpSQ6yhNxi4T5g?pwd1234 提取码&#xff1a;1234 1.2、官网在线下载 Tomcat官网&#xff1a;https://tomcat.apache.org/download-80.cg…

Ozone调试WSL系统的STM32编译文件配置

文章目录 背景步骤Ozone新建工程流程配置Ozeon找到WSL的代码文件ozone字体调整快速在Ozone中定位到代码文件参考 背景 在使用WSL进行嵌入式软件开发的时候&#xff0c;在debug方面&#xff0c;比较好用的工具有Ozone&#xff0c;那在Windows下调试需要配置和注意的点&#xff…

洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵

本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修改本段文字。 违者必究&#xff0c;谢谢配合。 个人主页&#xff1a;blog.csdn.net/jzw…

python通过usb连接标签打印机-开源的

背景&#xff1a; 最近接到了一个新需求&#xff0c;单位想做一个ERP系统&#xff0c;想把打印机一起兼容进去&#xff0c;实现自动化打印工作。主要我是做爬虫的没接触过这些&#xff0c;就到网上搜索了很多先关资料&#xff0c;最终发现&#xff0c;一大堆全都是什么VIP的才能…

Codeforces Round 984 (Div. 3)

题目链接 A. Quintomania 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;vector<int>arr(n);fer(i, 0 ,n) cin >> arr[i];fer(i, 1, n){if(abs(arr[i] - arr[i - 1]) ! 5 && abs(arr[i] - arr[i - 1]) ! 7){cout << "N…

【2】GD32H7xx 串口Idle + DMA接收不定长数据

目录 1. IDLE中断相关介绍2. D-Cache与DMA同时使用2.1 I-Cache与D-Cache2.2 D-Cache与DMA同时使用时的数据一致性问题2.2.1 CPU读取DMA写入到SRAM的数据2.2.2 DMA读取CPU写入到SRAM的数据 3. Uart Idle DMA收发程序4. 程序测试 1. IDLE中断相关介绍 在 GD32H7xx MCU 中&#…

python数据结构基础(8)

今天来使用python实现二叉树,二叉树中每个节点都是Node类对象,通过Tree类中的add()方法逐个向二叉树中加入树节点,构成完全二叉树或者非完全二叉树,代码如下: class Node(object):"""树节点类&#xff0c;用于构建二叉树。Attributes:- val: 节点存储的值。- r…

IEEE 1588:电信网络的精确时间协议 (PTP)

IEEE 1588&#xff1a;电信网络的精确时间协议 IEEE 1588 PTP 概述PTP 协议特征同步类型IEEE 1588 PTP 角色IEEE 1588 PTP 的工作原理PTP 设备类型PTP 消息类型事件消息一般信息 PTP 时钟类规范PTP 配置文件 https://www.techplayon.com/ieee-1588-precision-time-protocol-ptp…

深度学习基础—了解词嵌入

引言 上图是使用one-hot向量表示词向量的一种方式&#xff0c;这种表示方式优点是方面简洁&#xff0c;但是缺点也很明显&#xff0c;就是词与词之间独立性太强&#xff0c;没有关联&#xff0c;这样使得算法对相关词的泛化能力不强。 举个例子&#xff0c;假如我们已经学习到了…

实战:索引的命中机制

在 SQL Server 中,查询是否能命中索引(即是否能使用 Index Seek)取决于多个因素,包括索引的结构、查询条件的排列、和数据库优化器的策略。以下是一些常见的命中索引和不能命中索引的情况,及其详细解释: 一、命中索引的情况 1. 前导列匹配(典型的命中索引场景) 索引结…

Mac 安装protobuf2.5.0

文章目录 一、修改platform_macros.h二、编译protobuf三、配置环境变量四、测试 一、修改platform_macros.h platform_macros.h的目录位置为/Users/xxxx/protobuf-2.5.0/src/google/protobuf/stubs 在platform_macros.h中增加如下代码 #elif defined(__arm64__) #define GOOG…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天&#xff0c;好难过&#xff5e; 官方教程&#xff1a;https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述&#xff1a;https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

python使用turtle画图快速入门,轻松完成作业练习

turtle介绍 turtle是一个绘图库&#xff0c;可以通过编程进行绘图。其模拟了一个乌龟在屏幕上的运动过程。该库通常用于给青少年学习编程&#xff0c;当然&#xff0c;也可以使用其进行作图。 在一些学校中&#xff0c;可能在python学习的课程中&#xff0c;要求完成turtle绘…

智能 AI 视觉识别系统打造高效流量统计方案

智能AI视觉算法解决方案&#xff0c;涵盖客流人数统计、车流量统计、牲畜养殖场计数、物品点包计数、超员报警、火焰识别报警及驾驶行为报警等功能。可精准统计商场、车站等地客流&#xff0c;区分车型统计车流量并预警拥堵&#xff0c;准确计数牲畜及物品&#xff0c;检测工厂…

UVa514 解析:火车车厢重排序问题的模拟栈实现

来源:UVa514 铁轨 Rails。 这是一个火车车厢重排序的问题,通过模拟栈操作的算法实现。这种算法非常适用于具有栈结构特性的问题,比如括号匹配、货物堆放、编译器中语法检查。本文给出了C++的两种代码实现和Python的一种实现。 题目描述 某城市有一个火车站,铁轨铺设如图。…