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

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽,你好啊,我是雷工!

01 应用场景

在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中;

02 抽象工厂组成

抽象工厂包括抽象产品(即业务接口,可以通过抽象类或抽象接口设计)、实体产品(子类或实现类)、抽象工厂(业务接口和接口实现关联);

03 效果演示

当把配置文件改为1时,调用第1组里面的对象,返回结果1000;

当把配置文件改为1时,调用第1组里面的对象,返回结果2000;

04 准备工作

4.1、新建解决方案

创建新项目,添加空白解决方案

配置新解决方案的名称

4.2、添加应用

添加一个控制台程序(便于练习,其他应用均可以)

配置项目名称:LeiGongUI

4.3、添加类库

添加Models类库

4.4、添加类

在Models类库下添加相关类,然后创建个解决方案文件夹Other,将LeiGongUI和Models均移到Other文件夹内;

以上为非接口的准备工作,接下来开始主要的抽象工厂相关的内容创建

05 抽象工厂实现步骤

5.1、添加业务接口(抽象产品)

添加多少结构根据实际项目需要,此处练习添加两个;

创建类库:IBizLogicInterface

并添加两个接口

IEagleLogic,IPandalLogic

5.2、添加引用

在IBizLogicInterface中添加Models的引用;

5.3、添加业务实现(具体产品)

即具体产品,具体有多少产品,取决于有多少业务接口;

第一组:BizInterfaceImpl1

EagleLogiclmpl , OandaLogivlmpl

第二组:BizInterfaceImpl2

EagleLogiclmpl , OandaLogivlmpl

需添加的引用Models、IBizLogicInterface

注意事项:

无论添加多少组,每一组的实现类一定要同名,但是命名空间不同名

5.4、抽象工厂方法的编写

要解决的问题,从不同的实体产品中选择我们需要的一组实体产品,即接口实现类;

如何选择不同的产品,可以把需求配置到配置文件中

<appSettings>

   <add key="bizName" value="BizInterfaceImpl1"/>

</appSettings>

需要添加引用:接口模块、

5.5、使用业务接口

添加引用:

接口模块、

实体模块

抽象工厂模块

接口实现模块(此处为了开发调试的方便性,可以把实现类的模块添加引用,项目开发调试完成后,再删除引用)

总结:

当配成第一组实现类时,调用的对象全部是第一组里面的对象;

当配成第二组实现类时,调用的对象全部是第二组里面的对象;

06 后记

通过以上练习了解到以下几点:

①抽象工厂设计模式需要哪些模块;

②注意各个模块之间的引用关系;

③该模式的本质 还是接口多态的应用;

相关文章:

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中&#xff1b; 02 抽象工厂组成 抽象工厂包括抽象产品&#xff08;即业务接口&#xff0c;可以通过抽象类或抽象接口设计&#xff09;…...

【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典

摘要 在分布式系统的世界里&#xff0c;gRPC和RPC是两个耳熟能详的术语&#xff0c;但它们之间有何区别和联系&#xff1f;本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现&#xff0c;提供高性能的跨语言远程…...

听说这是MATLAB基础?

MATLAB&#xff08;矩阵实验室&#xff09;是一个强大的高性能计算环境和编程语言&#xff0c;广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识&#xff0c;涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区&#xf…...

【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现

前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异&#xff0c;但是都…...

数据流和数据流处理技术

一数据流 首先明确数据流概念&#xff1a;数据流是连续不断生成的、快速变化的无界数据序列 数据流类型&#xff1a; 数据流大致可以分为四种类型 1.连续型数据流&#xff1a;不断地产生数据&#xff0c;数据稳定速度输入系统。 2.突发型数据流&#xff1a;在某特定时间或…...

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

系列文章目录 文章目录 系列文章目录一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...

解决TikTok无网络连接问题解析

随着社交媒体的快速发展&#xff0c;TikTok已成为全球用户最喜欢的短视频平台之一&#xff0c;吸引了数以亿计的用户。然而&#xff0c;在享受这个平台时&#xff0c;用户经常会遇到无网络连接的问题&#xff0c;这不仅影响观看体验&#xff0c;还可能导致无法上传内容或参与社…...

k8s中,ingress的实现原理,及其架构。

图片来源&#xff1a;自己画的 图片来源&#xff1a;k8s官网 首先&#xff0c;什么是ingress? 是服务还是控制器&#xff1f; 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作&#xff0c;组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意&#xff1a; 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意&#xff1a; 上/下三角压缩存储是将0元素统一压缩存储&#xff0c;而不是将对角线元素统一压缩存储 三对角矩阵的…...

解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时&#xff0c;有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...

Dubbo和Http的调用有什么区别

背景 我们在项目开发中&#xff0c;需要进行调用外部接口时&#xff0c;往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上&#xff0c;有什么区别呢&#xff1f; 定位不同 一个是分布式环境下的框架&#xff0c;一个是通信协议。 Dubbo&#xff1a;是一种高性能的…...

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…...

【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解

1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...

u2net网络模型训练自己数据集

单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点

会话技术&#xff1a; cookie jwt令牌会话技术&#xff1a; jwt生成&#xff1a; Claims&#xff1a;jwt中的第二部分 过滤器&#xff1a; 拦截器&#xff1a; 前端无法识别controller方法&#xff0c;因此存在Dispa什么的...

数据架构图:从数据源到数据消费的全面展示

在这篇文章中&#xff0c;我们将探讨如何通过架构图来展示数据的整个生命周期&#xff0c;从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图&#xff0c;展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源&#xff1a;分为内部数据源&…...

useEffect 与 useLayoutEffect 的区别

useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数&#xff0c;有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同&#xff1a;4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...

OPENCV判断图像中目标物位置及多目标物聚类

文章目录 在最近的项目中&#xff0c;又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中&#xff0c;有时候目标物比较偏&#xff0c;也就是在图像的比较偏的位置&#xff0c;需要通过移动样本&#xff0c;将目标物置于视野正中央&#xff0c;然后再…...

分布式理论:拜占庭将军问题

分布式理论&#xff1a;拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述&#xff0c;由兰伯特于1082首次发表《The Byzantine Generals Prob…...

从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx

安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…...

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...

使用VBA快速将文本转换为Word表格

Word提供了一个强大的文本转表格的功能&#xff0c;结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格&#xff0c;表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...

力扣题解1870

这道题是一个典型的算法题&#xff0c;涉及计算在限制的时间内列车速度的最小值。这是一个优化问题&#xff0c;通常需要使用二分查找来求解。 题目描述&#xff08;中等&#xff09; 准时到达的列车最小时速 给你一个浮点数 hour &#xff0c;表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中&#xff0c;Run Keyword If 是一个条件执行的关键字&#xff0c;它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法&#xff1a; Run Keyword…...

虚拟机ip突然看不了了

打印大致如下&#xff1a; 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段&#xff0c;可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式&#xff0c;这样它就会获得与主机相同的IP地址&#xff0c;从而处于同一网段。或者&#xff0c;您可以使用…...

LeetCode[中等] 763. 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 思路 贪心…...

Java LeetCode每日一题

997. 找到小镇的法官 package JavaExercise20241002;public class JavaExercise {public static void main(String[] args) {int[][] array {{1,3},{2,3},{3,1}};Solution solution new Solution();System.out.println(solution.findJudge(3, array));} }class Solution {pu…...

数据结构--集合框架

目录 1. 什么是集合框架 2. 背后所涉及的数据结构以及算法 2.1 什么是数据结构 2.2 容器背后对应的数据结构 1. 什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 container &#xff0c;是定义在 java.util 包下的一组接口 int…...

微信公众平台制作网站/网络营销推广工具有哪些

1、打开原图素材&#xff0c;按Ctrl J把背景图层复制一层&#xff0c;点通道面板&#xff0c;选择蓝色通道&#xff0c;图像 > 应用图像&#xff0c;图层为背景&#xff0c;混合为正片叠底&#xff0c;不透明度50%&#xff0c;反相打钩&#xff0c; 2、回到图层面板&#…...

应用java网站建设前景/国外服务器免费ip地址

我的安装文件是ISO镜像文件&#xff0c;使用Virtual DAEMON Manager v 4.10打开&#xff1a; ora9i-1.iso ora9i-2.iso ora9i-3.iso 首先必须把上面三个镜像文件都mount到 drivers 里面。 启动Oracle 9i安装文件&#xff0c;从ora9i-1.iso开始&#xff0c;如图所示&#xff1a;…...

石家庄网站建设石家庄/电商培训有用吗

编译 | 凌敏、核子可乐 又一地区强制要求企业公开薪酬数据&#xff0c;律师&#xff1a;未来薪资透明才是常态。近日&#xff0c;美国数据收集网站 Levels.fyi 发布了 2022 年度程序员薪酬报告&#xff0c;根据职位、地域对各公司的薪酬情况进行了总结。据介绍&#xff0c;Leve…...

日本和女人做性网站/百度百科官网首页

第八届蓝桥杯结束了 本来是满怀信心去的 结果是二等奖 有点遗憾 前三道都错了 大三了没有下次了 总结一些自己的经验了 希望给后面参加蓝桥杯的朋友一点帮助 发现蓝桥杯能暴力的题目越来越少 思维方面的题越来越多 后面的题 算法也是越来越多 但是不会写也不要放空不然你…...

免费的查企业的网站/泉州百度推广排名优化

先看图&#xff0c;多数是从别人那里看的效果直接仿的&#xff0c;先开随笔&#xff0c;有了创意继续加 其实3个之后&#xff0c;脑子里立刻有个第四个的制作思路&#xff0c;无外乎是利用border或者块元素变形&#xff0c;然后构思好接下来的行为&#xff0c;写起来也非常简单…...

鹰潭网站建设/百度账号购买1元40个

绘制方法&#xff1a; 1.在控件的paint事件中绘制 2.绘制成图片&#xff0c;然后作为背景图或图片贴到工作区。 Bitmap bmp new Bitmap(IWidth, this.Height); Graphics g Graphics.FromImage(bmp); .... 最后调用即可 this.BackgroundImage I_Paint(); 添加功能&#xff1a…...