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篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了 ...
随机推荐
- HDU-3591 混合背包
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 一文掌握 Kubernetes 证书
如果你正在自己的环境中运行 Kubernetes,那么了解证书的工作原理以及如何管理它们以确保集群的安全性和完整性至关重要.在本文中,我们将解释什么是 Kubernetes 证书.其重要性,以及如何检 ...
- 华企盾DSC造成svn、git连接不上常见处理方法
1.检查svn服务器是否正在运行 2.检查个人模式连接不上服务器网络加密了客户端未加密(查看客户端日志进程是否为legal:1网络访问设置是否正常,试试只加密服务器IP及端口的方式),个人模式可以连接 ...
- MySQL运维16-双主双从读写分离
一.双主双从架构介绍 在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了.下面以双主双从作为示例演示.其中一个主机maste1用于处理所有写请求, ...
- 文心一言 VS 讯飞星火 VS chatgpt (166)-- 算法导论13.1 6题
六.用go语言,在一棵黑高为 k 的红黑树中,内部结点最多可能有多少个?最少可能有多少个? 文心一言: 红黑树是一种自平衡的二叉查找树,其中每个节点都有一个颜色属性,可以是红色或黑色.红黑树满足以下性 ...
- MyBatisPlus-使用步骤
MyBatisPlus-使用步骤 第一步 引入maven坐标依赖 <dependency> <groupId>com.baomidou</groupId> < ...
- Ubuntu图形界面root登录“sorry, that didn't work please
https://blog.51cto.com/u_14757092/2484490 ssh登录主机执行下vim /etc/pam.d/gdm-autologin 注释行 "auth requ ...
- STM32CubeMX教程11 RTC 实时时钟 - 入侵检测和时间戳
使用STM32CubeMX软件配置STM32F407开发板RTC实现入侵检测和时间戳功能,具体为周期唤醒回调中使用串口输出当前RTC时间,按键WK_UP存储当前RTC时间到备份寄存器,按键KEY_2从 ...
- PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台
个人用户管理是业务系统中非常基础且重要的一个公共服务系统,我们写的绝大多数应用都和个人用户或会员有关,用户(会员)数据安全无小事,必须有一个完备的用户管理平台系统. 因为不同公司的主业务不同,个人用户 ...
- POJ 2609 DP 双队列DP
POJ 2609 DP 双队列DP 题意 给出队列容量与一组数,并且我们有两个这样容量的空队列,要求我们按照次序把数装进两个队列中,输出最多能装多少以及每个数装进哪个队列. 思路 由于按照次序来装,不 ...