C#设计模式05——抽象工厂的写法
C# 抽象工厂是一种创建型设计模式,它提供了一种封装一组相关或相互依赖对象创建的方法。该模式使得客户端能够创建与应用程序所使用的特定工厂无关的对象。
以下是C#抽象工厂5W1H的解释:
1. What是C#抽象工厂?
C#抽象工厂是一种创建型设计模式,它提供了创建一组相关或相互依赖对象的方法。它使用一种抽象工厂接口来定义一组创建相关对象的方法,该接口在运行时绑定到具体的工厂类。这使得客户端能够创建与应用程序所使用的特定工厂无关的对象。
2. Why使用C#抽象工厂?
使用C#抽象工厂可以将对象的创建和实现细节与客户端代码分离开来,从而使得代码更加灵活、易于扩展和维护。它还提供了一种可以动态切换对象类型的方式,从而可以非常方便地在运行时更改对象类型。
3. Where在C#中使用C#抽象工厂?
C#抽象工厂可以用于需要创建一组相关对象的任何场景。例如,在GUI应用程序中,它可以用于创建特定类型的控件,或者在电子商务网站中,它可以用于创建特定类型的产品。
4. Who可以使用C#抽象工厂?
任何熟悉C#编程的开发人员都可以使用C#抽象工厂。
5. When使用C#抽象工厂?
在以下情况下使用C#抽象工厂:
- 需要创建一组相关对象,并且这些对象应该能够一起使用。
- 需要控制一组相关对象的创建过程,而无需在客户端代码中执行大量的创建逻辑。
- 需要将对象创建和实现细节与客户端代码分离开来,提供更高的代码可读性和可维护性。
6. How使用C#抽象工厂?
实现C#抽象工厂需要以下步骤:
- 创建一个抽象工厂接口,定义一组创建相关对象的抽象方法。
- 创建一组具体工厂类,分别实现抽象工厂接口中的抽象方法,用于创建相关的对象。
- 创建一组抽象产品接口,定义相关产品的通用接口。
- 创建一组具体产品类,分别实现抽象产品接口中的方法,用于实现相关产品的具体功能。
- 在客户端代码中,通过抽象工厂接口创建一组相关产品的对象,并使用这些对象的通用接口来操作它们。
产品
抽象产品一
//鼠标抽象类
public abstract class Mouse
{
public abstract void Print();
}
具体产品
//联想鼠标
public class LenovoMouse : Mouse
{
public override void Print()
{
Console.WriteLine("生产了一个联想鼠标");
}
}
//惠普鼠标
public class HPMouse : Mouse
{
public override void Print()
{
Console.WriteLine("生产了一个惠普鼠标");
}
}
抽象产品二
//键盘抽象类
public abstract class Keybo
{
public abstract void Print();
}
具体产品
//惠普键盘
public class HpKeybo : Keybo
{
public override void Print()
{
Console.WriteLine("生产了一个惠普键盘!");
}
}
//戴尔键盘类
public class DellKeybo : Keybo
{
public override void Print()
{
Console.WriteLine("生产了一个戴尔键盘!");
}
}
工厂
抽象工厂
/// <summary>
/// Pc产品工厂抽象类
/// </summary>
public abstract class PcFactory
{
public abstract Mouse CreateMouse();
public abstract Keybo CreateKeybo();
}
具体工厂
//戴尔pc工厂
public class DellPcFactroy : PcFactory
{
public override Keybo CreateKeybo()
{
return new DellKeybo();
} public override Mouse CreateMouse()
{
return new DellMouse();
}
}
//惠普pc工厂
public class HpPcFactory : PcFactory
{
public override Mouse CreateMouse()
{
return new HPMouse();
}
public override Keybo CreateKeybo()
{
return new HpKeybo();
} }
运行测试
//生产一个戴尔鼠标
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();

C#设计模式05——抽象工厂的写法的更多相关文章
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
桥接模式及C++实现 桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一 ...
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- iOS 设计模式之抽象工厂
设计模式是程序提升的必备知识,这里说下iOS怎样实现抽象工厂设计模式.本文是看过oc编程之道这本的抽象工厂这章后写出的,假设不明确原理能够看看那本书. TestView.h首先创建一个视图 // // ...
- php设计模式之抽象工厂模式
之前总结了一下工厂模式,其实准确地说是简单 工厂模式,在它的基础上再进行抽象就可以得到一种新的模式:抽象工厂模式. 专业一点的定义为: 抽象工厂模式(Abstact Factory)是一种常见的软件设 ...
- PHP设计模式:抽象工厂
示例代码详见https://github.com/52fhy/design_patterns 抽象工厂 抽象工厂(Abstract Factory)是应对产品族概念的.比如说,每个汽车公司可能要同时生 ...
- 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- C#设计模式(4)-抽象工厂模式
引言 上一篇介绍了设计模式中的简单工厂模式-C#设计模式(3)-工厂方法模式,本篇将介绍抽象工厂模式: 抽象工厂模式简介 抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依 ...
- C#设计模式之四抽象工厂模式(AbstractFactory)【创建型】
一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了 ...
随机推荐
- [ABC262D] I Hate Non-integer Number
Problem Statement You are given a sequence of positive integers $A=(a_1,\ldots,a_N)$ of length $N$. ...
- 【scikit-learn基础】--『预处理』之 标准化
数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...
- PyTorch 中自定义数据集的读取方法
显然我们在学习深度学习时,不能只局限于通过使用官方提供的MNSIT.CIFAR-10.CIFAR-100这样的数据集,很多时候我们还是需要根据自己遇到的实际问题自己去搜集数据,然后制作数据集(收集数据 ...
- hdu4365 Palindrome graph
Palindrome graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- XILINX HLS 入坑记录 之 写RAM 综合出 读取+写入Ram
最近使用 Xilinx HLS 来开发 算法的IPcore,使用的Vitis 2021,发现光是 EDA 工具就存在很多的bug,比如: 1.经常C综合 停留在 Using flow_target ' ...
- python中,如何优雅的解析和管理命令行参数
背景 我们在编写python程序时,程序中经常会提供多种功能或者模式,在实际使用时根据不同的参数使用不同的功能.那么如何获取命令行传入进来的参数呢? 一般方法 一般情况下,我们会使用 sys 模块,如 ...
- 从VMWare安装到Nginx配置
1.安装VMWare Workstation 16 player,Mac也可使用Parallels Desktop,自己有虚拟主机的跳过: 2.在虚拟机中,安装Centos7操作系统,使用Minima ...
- 在Global Mapper中导入点的文本格式
目录 有时候想在Global Mapper快速显示一个点的具体位置,来不及去创建一个具体的矢量文件.一个最快速的方式就是将这个点写在文本文件中导入: 13149831.629692005 281725 ...
- Spark Streaming快速入门
Spark Streaming快速入门 一.简介 Spark Streaming 是构建在 Spark Core 基础之上的流处理框架(但实际上是微批次处理框架),是 Spark 非常重要的组成部分. ...
- 你要了解的 OpenAI 那些事:创立简史,技术背景等
原文: https://openaigptguide.com/what-is-openai/ OpenAI 是一家人工智能研究公司,成立于2015年,总部位于美国旧金山.目前,OpenAI由创始人Sa ...