什么是C#简单工厂?

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

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

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

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

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

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

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

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

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

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

抽象产品角色

    //鼠标抽象类
public abstract class Mouse
{
public abstract void Print();
}

具体产品角色

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

工厂角色

    public  class MouseFachtory
{
private Mouse mouse = null;
public Mouse CreateMouse(string brand)
{ switch (brand)
{
case "dell":
mouse=new DellMouse();
break;
case "hp":
mouse = new HPMouse();
break;
case "lenovo":
mouse = new LenovoMouse();
break;
default:
break;
}
return mouse;
}
}

运行测试

                MouseFachtory mouseFachtory = new MouseFachtory();
var mouse1 = mouseFachtory.CreateMouse("dell");
var mouse2 = mouseFachtory.CreateMouse("dell");
var mouse3 = mouseFachtory.CreateMouse("dell");
var mouse4 = mouseFachtory.CreateMouse("hp");
var mouse5 = mouseFachtory.CreateMouse("hp");
var mouse6 = mouseFachtory.CreateMouse("lenovo");
mouse1.Print();
mouse2.Print();
mouse3.Print();
mouse4.Print();
mouse5.Print();
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. ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    目录 JDBC 建表 用法示例 JDBC表函数 资料分享 参考文章 JDBC 允许CH通过JDBC连接到外部数据库. 要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdb ...

  2. [CF1325E] Ehab's REAL Number Theory Problem

    Ehab's REAL Number Theory Problem 题目描述 You are given an array $ a $ of length $ n $ that has a speci ...

  3. 12 HTTP的实体数据

    目录 数据类型和编码 HTTP协议为什么要关心 body MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型 HTTP 常用数据类型 MIM ...

  4. 深入 K8s 网络原理(一)- Flannel VXLAN 模式分析

    目录 1. 概述 2. TL;DR 3. Pod 间通信问题的由来 4. 测试环境准备 5. 从 veth 设备聊起 6. 网桥 cni0 6.1 在 Pod 内看网卡信息 6.2 在 host 上看 ...

  5. 尚医通项目学习若依+springboot+springsecurity+redis+fastjson

    尚医通 [基于若依快速开发医疗系统] 主要内容 学习目标 项目简介 一款医疗平台. 系统包含:系统管理.药品进销存管理.看病就诊.收费管理.检查管理.数据统计等. 涉及技术 SpringBoot.My ...

  6. 从零玩转EasyPoi-cong-ling-wan-zhuan-easypoi

    title: 从零玩转EasyPoi date: 2023-01-11 13:49:25.908 updated: 2023-03-30 13:23:20.817 url: https://www.y ...

  7. linux文件摘选

    显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字(可以由其他字符)的文件或目录. 命令: ls -d /var/1*[0-9]*[a-z] [root@foundation0 ...

  8. java:JDBC使用步骤(mysql)java小白的第一篇博客

    1:环境要求 先在你的mysql里面创造一个数据库(并添加一点数据) 下载并导入驱动 2:jdbc的五大步骤 第一步:加载mysql驱动: 1 Class.forName("com.mysq ...

  9. Kafka 万字精讲|工作五年这些你都知道吗?

    目录 前言 一.Kafka 简介 1.1 事件流平台 1.2 Kafka 主要概念和术语 1.3 Zookeeper 二.Kafka 集群搭建和使用 2.1 使用 Docker Compose 搭建 ...

  10. 一些Mybatis的知识点&易错点总结

    1.映射文件配置容易出错 在映射文件中,我们习惯性在sql语句后面添加';'. 结果是报了一堆错误: org.apache.ibatis.exceptions.PersistenceException ...