当前位置: 首页 > 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 后记

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

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

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

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

http://www.lryc.cn/news/452118.html

相关文章:

  • 【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典
  • 听说这是MATLAB基础?
  • 【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现
  • 数据流和数据流处理技术
  • (IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案
  • 解决TikTok无网络连接问题解析
  • k8s中,ingress的实现原理,及其架构。
  • 【数据结构强化】应用题打卡
  • 解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found
  • Dubbo和Http的调用有什么区别
  • ARM 架构、cpu
  • 【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解
  • u2net网络模型训练自己数据集
  • 登录功能开发 P167重点
  • 数据架构图:从数据源到数据消费的全面展示
  • useEffect 与 useLayoutEffect 的区别
  • OPENCV判断图像中目标物位置及多目标物聚类
  • 分布式理论:拜占庭将军问题
  • 从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx
  • 阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战
  • 人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现
  • 使用VBA快速将文本转换为Word表格
  • 力扣题解1870
  • D3.js数据可视化基础——基于Notepad++、IDEA前端开发
  • 在Robot Framework中Run Keyword If的用法
  • 虚拟机ip突然看不了了
  • LeetCode[中等] 763. 划分字母区间
  • Java LeetCode每日一题
  • 数据结构--集合框架
  • Win10鼠标总是频繁自动失去焦点-非常有效-重启之后立竿见影