C#设计模式04——工厂方法的写法
1. What是C#工厂方法?
C#工厂方法是一种设计模式,它通过创建具有相同基类的对象来实现代码的重用和灵活性。
2. Why使用C#工厂方法?
使用C#工厂方法有以下好处:
- 降低了代码的耦合性,让代码更易于扩展和修改;
- 隐藏了对象的创建细节,将对象的创建从客户端代码中分离出来;
- 能够让客户端代码更简洁,并且提供了更好的灵活性。
3. Who可以使用C#工厂方法?1
任何使用C#语言的开发人员都可以使用C#工厂方法。
4. Where可以使用C#工厂方法?
C#工厂方法可以应用于任何需要创建对象的场景,包括但不限于:
- 数据库操作;
- 用户界面组件;
- 游戏开发;
- 日志系统。
5. When使用C#工厂方法?
使用C#工厂方法的最佳时机是当你需要创建多个对象具有相同的基类,或者当你需要通过隐藏对象的创建细节来提供更好的灵活性时。
6. How使用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("生产了一个联想鼠标");
}
}
抽象工厂角色
/// <summary>
/// 鼠标工厂抽象类
/// </summary>
public abstract class MouseFactory
{
public abstract Mouse CreateMouse();
}
具体工厂角色
//戴尔鼠标工厂
public class DellMouseFactroy : MouseFactory
{
public override Mouse CreateMouse()
{
return new DellMouse();//在具体的工厂中实例化产品
}
}
//惠普鼠标工厂
public class HpMouseFactory : MouseFactory
{
public override Mouse CreateMouse()
{
return new HPMouse();//在具体的工厂中实例化产品
}
}
/// <summary>
/// 联想鼠标工厂
/// </summary>
public class LenovoMouseFactory : MouseFactory
{
public override Mouse CreateMouse()
{
return new LenovoMouse();//在具体的工厂中实例化产品
}
}
运行测试
//生产一个戴尔鼠标
MouseFactory dellMouseFactory = new DellMouseFactroy();
_04工厂模式.Mouse dellMouse = dellMouseFactory.CreateMouse();
dellMouse.Print(); //生产一个惠普鼠标
MouseFactory hpMouseFactory = new HpMouseFactory();
_04工厂模式.Mouse hpMouse = hpMouseFactory.CreateMouse();
hpMouse.Print(); //生产一个联想鼠标
LenovoMouseFactory lenovoMouseFactory = new LenovoMouseFactory ();
_04工厂模式.Mouse lenovoMouse = lenovoMouseFactory.CreateMouse();
lenovoMouse.Print();

源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git
C#设计模式04——工厂方法的写法的更多相关文章
- C#设计模式(3)——工厂方法模式
一.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 二.代码实现 namespace 设计模式之工厂方法模式 { /// <summary&g ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- C#设计模式(3)——工厂方法模式(转)
C#设计模式(3)——工厂方法模式 一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过 ...
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- php设计模式之工厂方法模式
php设计模式之工厂方法模式 工厂方法模式 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Pol ...
- 23种设计模式之工厂方法(Factory Method Pattern)
工厂方法 前面我们学习了简单工厂,发现一个问题就是简单工厂集合了矛盾,为了解决这个问题我们针对每一种产品提供一个工厂类.通过不同的工厂实例来创建不同的产品实例.在同一等级结构中,支持增加任意产品这种设 ...
- java设计模式之工厂方法探究
简单工厂 + 工厂方法 + 抽象工厂 看了十几篇博客,每篇基本上都能有个自己的解释,我汇总这些内容,重新梳理整理了一番,以形成自己的理解. 简单工厂模式其实不算23种设计模式之 ...
- 设计模式——从工厂方法模式到 IOC/DI思想
回顾简单工厂 回顾:从接口的角度去理解简单工厂模式 前面说到了简单工厂的本质是选择实现,说白了是由一个专门的类去负责生产我们所需要的对象,从而将对象的创建从代码中剥离出来,实现松耦合.我们来看一个例子 ...
- 浅谈C++设计模式之工厂方法(Factory Method)
为什么要用设计模式?根本原因是为了代码复用,增加可维护性. 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP).里氏代换原则(Liskov Substitution ...
- java 23 - 1 设计模式之工厂方法模式
转载: JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
随机推荐
- [QOJ4815] Flower's Land
简要题意:给出一个 \(n\) 个点的树,对某个点 \(i\) 求包含某一个点的大小为 \(k\) 的权值最大的连通块,一个连通块的权值是其所有点的权值之和. \(n\le 40000,k\le \m ...
- 理解 Paimon changelog producer
介绍 目的 Chaneglog producer 的主要目的是为了在 Paimon 表上产生流读的 changelog, 所以如果只是批读的表是可以不用设置 Chaneglog producer 的. ...
- 文档理解的新时代:LayOutLM模型的全方位解读
一.引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显.特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战.文档不仅包含文本信息,还包 ...
- 【最佳实践】京东小程序-LBS业务场景的性能提升
一.前言 1.1 京东LBS门详业务介绍 京东LBS门详目前已经支持了仓网.药急送.天选.小时达POP多种业务,并且具备了多端的能力,一套代码可以在京东app.健康app.微信小程序中运行,一定程度上 ...
- 【笔记整理】requests使用代理
使用proxies参数传递代理信息 import requests if __name__ == '__main__': proxies = { # 这个字典的key不可以乱写,必须是http和htt ...
- GIS系统想要实现Cesium For Unreal的视觉效果是否有捷径可走?
对于大多数GIS开发人员来说,CesiumJS都是比较熟悉的引擎,但是相比较Cesium For Unreal而言,CesiumJS的视觉效果就显得差强人意了,因此一些GIS开发人员对Cesium F ...
- ElasticSearch之线程的数量
ElasticSearch在运行过程中,涉及多种线程池.线程的使用,因此而需要给予足够的线程资源,保证ElasticSearch在需要时可以正常创建出线程. 查看Linux系统当前用户允许创建的线程的 ...
- ElasticSearch之Nodes info API
查看当前集群中各节点的信息,执行如下命令: curl -X GET "https://localhost:9200/_nodes?pretty" --cacert $ES_HOME ...
- Map的特性(有序和无序)讨论
目录 什么是红黑树? 在 Java 中,基础java.util.Map 接口本身并不保证元素的顺序.具体的实现类 HashMap 和 TreeMap 的行为(无序.有序)有所不同: HashMap 类 ...
- Android 事件分发介绍
目录 一.目的 二.环境 三.相关概念 3.1 事件分发 四.详细设计 4.1应用布局 4.1.1 应用布局结构 4.1.2 LayoutInspector 4.2 关键View&方法 4.2 ...