什么是C#简单工厂?

C#简单工厂是一种创建对象的设计模式,它定义一个工厂类来创建指定类型的对象,而不是在客户端代码中直接创建对象。简单工厂模式通常使用静态方法来生成对象,并且这些静态方法通常被称为工厂方法。

为什么要使用C#简单工厂?

C#简单工厂模式的主要目的是隐藏创建对象的复杂性,并提供一个可控的对象创建过程。这种方式可以降低客户端代码的耦合性,提高代码的可维护性和可扩展性,并能够在对象的创建过程中尽可能地避免代码重复。

简单工厂模式应用的场景有哪些?

C#简单工厂模式通常适用于一些场景,例如:

- 类的创建过程比较复杂,需要进行多项处理或涉及多个对象之间的协作
- 客户端需要通过一个公共接口来创建多个不同类型的对象
- 客户端不关心创建过程的细节,只想通过一个简单的方法来创建对象实例

简单工厂模式有哪些实现方式?

C#简单工厂模式通常有两种实现方式,分别是基于接口和基于抽象类的实现方式。

- 基于接口的实现方式:将工厂类定义为接口或抽象类,然后在具体的工厂类中实现该接口或继承该抽象类,并根据客户端需求创建指定类型的对象。

- 基于抽象类的实现方式:将工厂类定义为抽象类,并在该抽象类中定义一个抽象的工厂方法,用于创建指定类型的对象。具体的工厂类实现该抽象类,并根据客户端需求实现工厂方法创建指定类型的对象。

抽象产品角色

  1. //鼠标抽象类
  2. public abstract class Mouse
  3. {
  4. public abstract void Print();
  5. }

具体产品角色

  1. //戴尔鼠标
  2. public class DellMouse : Mouse
  3. {
  4. public override void Print()
  5. {
  6. Console.WriteLine("生产了一个Dell鼠标");
  7. }
  8. }
  1. //惠普鼠标
  2. public class HPMouse : Mouse
  3. {
  4. public override void Print()
  5. {
  6. Console.WriteLine("生产了一个惠普鼠标");
  7. }
  8. }
  1. //联想鼠标
  2. public class LenovoMouse : Mouse
  3. {
  4. public override void Print()
  5. {
  6. Console.WriteLine("生产了一个联想鼠标");
  7. }
  8. }

工厂角色

  1. public class MouseFachtory
  2. {
  3. private Mouse mouse = null;
  4. public Mouse CreateMouse(string brand)
  5. {
  6.  
  7. switch (brand)
  8. {
  9. case "dell":
  10. mouse=new DellMouse();
  11. break;
  12. case "hp":
  13. mouse = new HPMouse();
  14. break;
  15. case "lenovo":
  16. mouse = new LenovoMouse();
  17. break;
  18. default:
  19. break;
  20. }
  21. return mouse;
  22. }
  23. }

运行测试

  1. MouseFachtory mouseFachtory = new MouseFachtory();
  2. var mouse1 = mouseFachtory.CreateMouse("dell");
  3. var mouse2 = mouseFachtory.CreateMouse("dell");
  4. var mouse3 = mouseFachtory.CreateMouse("dell");
  5. var mouse4 = mouseFachtory.CreateMouse("hp");
  6. var mouse5 = mouseFachtory.CreateMouse("hp");
  7. var mouse6 = mouseFachtory.CreateMouse("lenovo");
  8. mouse1.Print();
  9. mouse2.Print();
  10. mouse3.Print();
  11. mouse4.Print();
  12. mouse5.Print();
  13. mouse6.Print();

源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git

C#设计模式03——简单工厂的写法的更多相关文章

  1. PHP设计模式:简单工厂

    示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...

  2. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  3. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  4. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  5. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  6. iOS设计模式 - (3)简单工厂模式

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  7. 两种设计模式(1)==>>“简单工厂”

    我们以做一个计算器为例,给大家介绍简单工厂的应用: 效果: 这里我们使用 继承 ,虚方法, 简单工厂的设计模式来完成 首先,我们除了搭好窗体外,我们应该把我们的一些类准备好: 1.计算的父类Calcu ...

  8. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III

    阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...

  9. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  10. php实现设计模式之 简单工厂模式

    作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...

随机推荐

  1. 基于Docker Desktop搭建Kafka集群并使用Java编程开发

    一.引言 前段时间因课业要求使用Docker Desktop 部署Kafka集群并编写生产者消费者程序,折磨了我好几天,在查找大量资料后终于是把整个集群搭建完成了.现在我想要分享其中搭建的历程,希望能 ...

  2. NC65获取Token以及相关信息

    private static void setToken() { IPriviledgedGenerator tokenGenerator = (IPriviledgedGenerator) Busi ...

  3. HTML之元素相对页面(视口)左上角的绝对坐标

    目录 一. 绝对位置 二. 相对位置 一. 绝对位置 网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标.无论网页滚动条如何滚动,它都是不会变化的. // 获取元素的绝对位置坐标(相对于页 ...

  4. vue 2实战系列 —— 复习Vue

    复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...

  5. mysql的CRUD操作实现

      插入语句(INSERT):一旦我们选择了要插入的字段,   我们就必须保证要插入的数值和选择的字段的个数,顺序,类型一致. 1:怎么插入一条数据: INSERT INTO 插入的表名称(列名1,列 ...

  6. C++篇:第六章_指针_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 六.指针 (一)指针规则 两个指针不能进行加法运算,因为指针是变量,其值是另一个 ...

  7. 每条你收藏的资讯背后,都离不开TA

    摘要:云原生数据库GaussDB(for Redis)不仅提升了阅客的服务效率,让个性化推荐更快更稳,还降低了存储和改造成本,为企业未来发展奠定了云化基础,助力阅客实现更高质量的资讯触达. 随着互联网 ...

  8. 大力出奇迹,揭秘昇腾CANN的AI超能力

    摘要:CANN(Compute Architecture for Neural Networks)异构计算架构,是以提升用户开发效率和释放昇腾AI处理器极致算力为目标,专门面向AI场景的异构计算架构. ...

  9. 新变化新营销 这些知识点你得 Get!(文末有 PPT 福利首次放送)

      更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在刚刚结束的第 7 期火山引擎数智平台 VeDI「增长课堂」上,火山引擎数智平台 VeDI 零售行业解决方案. ...

  10. SQL SERVER 查询表结构,导出到Excel 生成代码用

    查询所有表 select * from information_schema.tables SQL SERVER 查询表结构,导出到Excel 生成代码用 --快速查看表结构字段(比较全面的) SEL ...