C#设计模式03——简单工厂的写法
什么是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——简单工厂的写法的更多相关文章
- PHP设计模式:简单工厂
示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...
- C#设计模式(2)-简单工厂模式
引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...
- C#设计模式(2)——简单工厂模式(转)
C#设计模式(2)——简单工厂模式 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 设计模式之简单工厂模式(Simple Factory)
原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...
- iOS设计模式 - (3)简单工厂模式
iOS设计模式 - (3)简单工厂模式 by Colin丶 转载请注明出处: http://blog.csdn.net/hitwhylz/article/ ...
- 两种设计模式(1)==>>“简单工厂”
我们以做一个计算器为例,给大家介绍简单工厂的应用: 效果: 这里我们使用 继承 ,虚方法, 简单工厂的设计模式来完成 首先,我们除了搭好窗体外,我们应该把我们的一些类准备好: 1.计算的父类Calcu ...
- 从零开始单排学设计模式「简单工厂设计模式」黑铁 III
阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- php实现设计模式之 简单工厂模式
作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...
随机推荐
- 基于Docker Desktop搭建Kafka集群并使用Java编程开发
一.引言 前段时间因课业要求使用Docker Desktop 部署Kafka集群并编写生产者消费者程序,折磨了我好几天,在查找大量资料后终于是把整个集群搭建完成了.现在我想要分享其中搭建的历程,希望能 ...
- NC65获取Token以及相关信息
private static void setToken() { IPriviledgedGenerator tokenGenerator = (IPriviledgedGenerator) Busi ...
- HTML之元素相对页面(视口)左上角的绝对坐标
目录 一. 绝对位置 二. 相对位置 一. 绝对位置 网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标.无论网页滚动条如何滚动,它都是不会变化的. // 获取元素的绝对位置坐标(相对于页 ...
- vue 2实战系列 —— 复习Vue
复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...
- mysql的CRUD操作实现
插入语句(INSERT):一旦我们选择了要插入的字段, 我们就必须保证要插入的数值和选择的字段的个数,顺序,类型一致. 1:怎么插入一条数据: INSERT INTO 插入的表名称(列名1,列 ...
- C++篇:第六章_指针_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 六.指针 (一)指针规则 两个指针不能进行加法运算,因为指针是变量,其值是另一个 ...
- 每条你收藏的资讯背后,都离不开TA
摘要:云原生数据库GaussDB(for Redis)不仅提升了阅客的服务效率,让个性化推荐更快更稳,还降低了存储和改造成本,为企业未来发展奠定了云化基础,助力阅客实现更高质量的资讯触达. 随着互联网 ...
- 大力出奇迹,揭秘昇腾CANN的AI超能力
摘要:CANN(Compute Architecture for Neural Networks)异构计算架构,是以提升用户开发效率和释放昇腾AI处理器极致算力为目标,专门面向AI场景的异构计算架构. ...
- 新变化新营销 这些知识点你得 Get!(文末有 PPT 福利首次放送)
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在刚刚结束的第 7 期火山引擎数智平台 VeDI「增长课堂」上,火山引擎数智平台 VeDI 零售行业解决方案. ...
- SQL SERVER 查询表结构,导出到Excel 生成代码用
查询所有表 select * from information_schema.tables SQL SERVER 查询表结构,导出到Excel 生成代码用 --快速查看表结构字段(比较全面的) SEL ...