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篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了 ...
随机推荐
- C# 基础编程题集锦
简单字符串加密 编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下: 'a→d' 'b'→'e' 'w'→z' ...... x'→'a' 'y'→b' 'z→c' 'A'→'D' ...
- JUC——让步与优先级
Thread.yield():方法作用是:暂停当前正在执行的线程对象(及放弃当前拥有的cup资源),并执行其他线程 yield():做的是让当前运行线程回到可运行的状态,以允许具有相同优先级的其他线程 ...
- Python 实现 PDF 到 Word 文档的高效转换(DOC、DOCX)
PDF(Portable Document Format)已成为一种广泛使用的电子文档格式.PDF的主要优势是跨平台,可以在不同设备上呈现一致的外观.然而,当我们需要对文件内容进行编辑或修改,直接编辑 ...
- 构建健康游戏环境:DFA算法在敏感词过滤的应用
现在的游戏有敏感词检测这一点,相信大家也不陌生了,不管是聊天,起名,签名还是简介,只要是能让玩家手动输入的地方,一定少不了敏感词识别,至于识别之后是拒绝修改还是星号替换,这个就各有各的做法了,但是绕不 ...
- 从VMWare安装到Nginx配置
1.安装VMWare Workstation 16 player,Mac也可使用Parallels Desktop,自己有虚拟主机的跳过: 2.在虚拟机中,安装Centos7操作系统,使用Minima ...
- 我的第一个JavaWeb程序!!!
- 牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02
书接上回,Go lang1.18首个程序的运行犹如一声悠扬的长笛,标志着并发编程的Go lang巨轮正式开始起航.那么,在这艘巨轮之上,我们首先该做些什么呢?当然需要了解最基本的语法,那就是基础变量的 ...
- 全域Serverless+AI,华为云加速大模型应用开发
日前,华为全联接大会2023在上海召开.华为云CTO张宇昕在大会上发布了基于Serverless技术的大模型应用开发框架,框架以面向AI领域全新升级的FunctionGraph 3.0为核心,将Baa ...
- 技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用
摘要:本文将详细介绍GaussDB(DWS)重要运维管理功能"升级"的原理和使用. 运维管理模块是任何软件产品最基础和重要的一部分.是软件产品的门户,也是用户接触和使用软件产品的和 ...
- 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中
摘要:Kubernetes 很多看起来比较"繁琐"的设计的主要目的,都是希望为开发者提供更多的"可扩展性",给使用者带来更多的"稳定性"和& ...