C# 工厂模式 个人基本流程
有个前提
本文并不会介绍工厂模式,只是记录在实际当中个人比较喜欢的工厂写法。仅仅作为备忘和参考。
开始流程
定义一个抽象类,包含一些公共的业务逻辑(也可以是接口)
/// <summary>
/// 业务的基类,包含一些公共的业务逻辑
/// </summary>
abstract class BaseClass
{
protected BaseClass() { } public virtual void Print()
{
throw new InvalidOperationException();
}
}
然后定义一个具体业务
class ClassA:BaseClass
{
public override void Print()
{
Console.WriteLine("233333333333");
}
}
写一个枚举,包含很多业务分类
enum MyEnum
{
// 主要编写一些具体的业务参数,传递这个就可以找到对应的业务
A,
B
}
写一个工厂接口,包括枚举和创建返回
interface IFactoryHandler
{
MyEnum TypEnum { get; } BaseClass Create();
}
写一个用到这个工厂接口的类,用于创建具体业务
class A : IFactoryHandler
{
public MyEnum TypEnum { get; } = MyEnum.A;
public BaseClass Create()
{
return new ClassA();
}
}
最后利用反射方法,把枚举和具体业务一一对应
public class Factory
{
//反射到所有用到这个接口的类
private Factory()
{
var type = typeof(IFactoryHandler);
var instances = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.GetInterfaces().Contains(type)
select Activator.CreateInstance(t) as IFactoryHandler;
FactoryList = instances.ToArray();
} private IFactoryHandler[] FactoryList { get; } public BaseClass Create(MyEnum type)
{
try
{
var factoryHandler = FactoryList.Single(x => x.TypEnum == type).Create();
return factoryHandler;
}
catch (Exception e)
{
throw new InvalidOperationException("无效的操作,工厂和参数不匹配", e);
}
}
}
白嫖链接
https://github.com/yinghualuowu/SakuraStuffPack/tree/master/SakuraStuffPack/SakuraStuffPack/Factory
C# 工厂模式 个人基本流程的更多相关文章
- Design Patterns (简单工厂模式)
文章很长很精彩,如是初学请耐心观看.(大神请绕道!) 简单工厂模式: 1.创建型模式 2.简单工厂模式概述 3.简单工厂模式的结构与实现 4.简单工厂模式的应用实例 5.创建对象与使用对象 6.简单工 ...
- 【设计模式 - 1】之工厂模式(Factory)
1 模式简介 1.1 工厂模式作用 工厂模式解决的是"使用new关键字获取对象造成松耦合"的问题. 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- Head First 设计模式之工厂模式(Factory Pattern)
前言: 除了使用new操作符之外,还有更多制造对象的方法.你将了解到实例化这个活动不应该总是公开的进行,也会意识到初始化会造成“耦合”的问题.工厂模式将会从复杂的依赖中帮你脱困. 1. 简单的工厂 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- OO之工厂模式
以下为工厂模式的详解,包括简单工厂,普通工厂模式,抽象工厂. 引子: 假设有一个交通工具公司,生产自行车,汽车,飞机等,现要销售该公司的产品,要怎么设计呢? 在交通工具商店中加一个if else判断如 ...
- Java设计模式系列之工厂模式
工厂模式将大量有共同接口的类实例化,工厂模式可以实现动态决定实例化哪一个类的对象,工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):添加某一种类型的 ...
- js对于工厂模式的理解
有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题 ...
- JavaScript设计模式之工厂模式
一.工厂模式概念 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子类可以重写接口方法以便创建的时候指定自己的对象类型(抽象工厂). 这个模 ...
随机推荐
- java8 Lambda及Stream学习笔记
Lambda表达式Lambda 表达式可以替代只有一个抽象函数的接口实现. Lambda表达式同时还提升了对集合.框架的迭代.遍历.过滤数据的操作. Lambda表达式使用场景任何有函数式接口的地方 ...
- 网络诊断工具iPerf的使用
iPerf 是一个网络性能测试工具,用于测量最大 TCP 和 UDP 带宽性能.它支持多种平台,包括 Windows.Linux.macOS 等.以下是 iPerf 的基本使用方法: 安装 iPerf ...
- mac brew install Error: No available formula with the name “*“的解决办法
背景 在mac上使用brew安装软件发生错误 解决办法 执行以下命令即可 rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core ...
- 最新扣子(Coze)实战案例:扣子卡片的制作及使用,完全免费教程
♂️ 大家好,我是斜杠君,手把手教你搭建扣子AI应用. ☘️ 本文是<AI应用开发系列教程之扣子(Coze)实战教程>,完全免费学习. 关注斜杠君,可获取完整版教程. 如果想学习AI应用 ...
- LLM学习笔记
1. 评估榜单 1.1. C-Eval C-Eval 是一个全面的中文基础模型评估套件.它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别. https://cevalbenchma ...
- Android Verified Boot 2.0 AVB详解(基于Android P)
原文地址:https://android.googlesource.com/platform/external/avb/+/master/ 译文地址:https://blog.csdn.net/sha ...
- 是什么导致了客户端TCP连不上服务器?
这几年做了很多基于 GGTalk开源即时通讯系统 的定制开发项目,经常会碰到如下两个问题,分享出来,应该对大家会有所帮助: (1)定制开发完成后,在给客户部署GGTalk即时通讯服务端到正式的服务 ...
- UF_MB_ask_button_id 测试
# tesy UF_MB_ask_button_id import NXOpen import NXOpen_UF as nuf def main(): ses = NXOpen.Session.Ge ...
- IdentityServer4 获取发现文档 提示 Keyset is missing
客户端请求提示 Keyset is missing 解决办法 添加以下代码 services.AddIdentityServer(options => { options.Events.Rais ...
- IDEA 设置自动去掉不用的import