C#设计模式之---抽象工厂模式

news/2024/10/17 18:13:21/

抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory Pattern)是一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建,它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品比较少,工厂都多元化,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式就不太适用,而使用抽象工厂模式却可以很好地解决。

using System;
namespace ConsoleApplication
{//一般每个接口或类都写在单独的.cs文件中//本示例为了执行查看方便才写在一起public interface IDatabase{void Delete();void Insert();}public interface IORM{void Delete();void Insert();}//Sqlserver的增删public class Sqlserver : IDatabase{public void Delete(){Console.WriteLine("delete data from sqlserver");}public void Insert(){Console.WriteLine("insert data to sqlserver");}}//Mysql的增删public class Mysql : IDatabase{public void Delete(){Console.WriteLine("delete data from Mysql");}public void Insert(){Console.WriteLine("insert data to Mysql");}}//Sqlserver的增删public class SqlserverORM : IORM{public void Delete(){Console.WriteLine("delete data from sqlserver by ORM");}public void Insert(){Console.WriteLine("insert data to sqlserver by ORM");}}//Mysql的增删public class MysqlORM : IORM{public void Delete(){Console.WriteLine("delete data from Mysql by ORM");}public void Insert(){Console.WriteLine("insert data to Mysql by ORM");}}public interface ICreator{IDatabase CreateDatabase();IORM CreateORM();}public class MysqlFactory:ICreator{/// /// 负责创建Mysql/// /// public IDatabase CreateDatabase(){return new Mysql();}/// /// 负责创建MysqlORM/// /// public IORM CreateORM(){return new MysqlORM();}}public class SqlserverFactory:ICreator{/// /// 负责创建Sqlserver/// /// public IDatabase CreateDatabase(){return new Sqlserver();}/// /// 负责创建SqlserverORM/// /// public IORM CreateORM(){return new SqlserverORM();}}/*public static class IFactory{//根据需求创建public static Database CreateDatabase(string dbType){Database db = null;switch (dbType){case "Sqlserver":db = new Sqlserver();break;case "Mysql":db = new Mysql();break;default:break;}return db;}}*/class Program{static void Main(string[] args){IDatabase db1 = new SqlserverFactory().CreateDatabase();db1.Delete();db1.Insert();IDatabase db2 = new MysqlFactory().CreateDatabase();db2.Delete();db2.Insert();IORM db3 = new SqlserverFactory().CreateORM();db3.Delete();db3.Insert();IORM db4 = new MysqlFactory().CreateORM();db4.Delete();db4.Insert();//添加新数据库直接添加对应的类即可Console.ReadKey();}}
}

 


http://www.ppmy.cn/news/998247.html

相关文章

vue3搭建(vite+create-vue)

目录 前提条件 输入命令 对于Add an End-to-End Testing Solution nightwatch和Cypress 和 Playwright 运行 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js (node -v查看版本) 输入命令 npm init vuelatest 这一指令将会安装并执行 create-…

Redis - 数据过期策略

Redis提供了两种数据过期策略 惰性删除 和 定期删除 惰性删除 当某个key过期时,不马上删除,而是在调用时,再判断它是否过期,如果过期再删除它 优点 : 对CPU友好,对于很多用不到的key,不用浪费…

KL15 是什么?ACC,crank,on等

KL含义 KL is the abbreviation for klemme which is the German term for connector / connection.KL是“ klemme”的缩写,这是德语中连接器或连接的术语。 KL30 ,通常表示电瓶的正极。positive KL31,通常表示电瓶的负极。negative KL15, 通…

TypeC拓展设计方案|TypeC转HDMI设计方案|CS5261/CS5265芯片设计参数对比

集睿智远CS5261/CS5265都可以用于设计TypeC转HDMI方案,低成本TypeC扩展坞设计方案,而两者也有些差异:1.CS5261支持DP1.4输入,一个HDMI1.4输出,即HDMI输出为4K30HZ ;CS5265DP1.4到HDMI2.0转换芯片,即HDMI输出…

如何在免费版 pycharm 中使用 github copilot (chatGPT)?

起因 在 vscode 中使用了 github copilot 以后,感觉这个人工智能还不错。 但 vscode 对于 python 项目调试并不是特别方便,所以想在 Pycharm 中也能使用同一个 github 账号,用上 copilot 的功能。 不需要等待,安装即用&#xff…

游戏APP开发:创新设计的秘诀

在游戏 APP开发中,创新设计是游戏开发公司的一大追求,为了可以为用户带来更好的游戏体验,这就需要对游戏 APP开发进行创新设计。那么,游戏 APP开发中的创新设计是什么呢?接下来,我们就一起来看看吧。 想要…

C#设计模式之---工厂方法模式

工厂方法模式(Factory Method) 工厂方法模式(Factory Method)的出现解决简单工厂中的难以拓展的问题,解决了其一旦添加新的产品,则需要修改简单工厂方法,进而造成简单工厂的实现逻辑过于复杂。…

GPS北斗卫星时钟服务器如何在各领域发挥作用

GPS北斗卫星时钟服务器如何在各领域发挥作用 GPS北斗卫星时钟服务器如何在各领域发挥作用 1.通信与网络:时钟服务器可用于确保通信网络中的各个设备具有高度精确的时间同步。这对于数据通信、日志记录、安全认证等方面至关重要。 2.金融交易:在金融行业…