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

news/2024/10/17 18:30:05/

工厂方法模式(Factory Method)

工厂方法模式(Factory Method)的出现解决简单工厂中的难以拓展的问题,解决了其一旦添加新的产品,则需要修改简单工厂方法,进而造成简单工厂的实现逻辑过于复杂。工厂方法模式通过面向对象编程中的多态性来将对象的创建延迟到具体工厂中,把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,也就克服了简单工厂模式中缺点。工厂方法模式也是属于创建型模式。

using System;
namespace ConsoleApplication
{//一般每个接口或类都写在单独的.cs文件中//本示例为了执行查看方便才写在一起public interface IDatabase{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");}}public interface ICreator{IDatabase CreateDatabase();}public class MysqlFactory:ICreator{/// <summary>/// 负责创建Mysql/// </summary>/// <returns></returns>public IDatabase CreateDatabase(){return new Mysql();}}public class SqlserverFactory:ICreator{/// <summary>/// 负责创建Sqlserver/// </summary>/// <returns></returns>public IDatabase CreateDatabase(){return new Sqlserver();}}/*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();//添加新数据库直接添加对应的类即可Console.ReadKey();}}
}

 


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

相关文章

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

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

Oracle数据库函数大全

文章目录 字符函数ASCII(X)CONCAT(X,Y)INSTR(X,STR[,START][,N)LENGTH(X)LOWER(X)UPPER(X)LTRIM(X[,TRIM_STR])RTRIM(X[,TRIM_STR])TRIM([TRIM_STR FROM]X)REPLACE(X,old,new)SUBSTR(X,start[,length])INITCAPLPAD/RPAD&#xff08;string1,x[,string2]&#xff09;REGEXP_REPL…

前端文件上传 、下载

一、文件上传 import { importData } from /api.js;async importFn() {// 文件数据let file null; // 文件使用form-data格式&#xff0c;参数使用json格式let formData new FormData();formData.append("excel", file);formData.append("excelQuery", …

CGAL-2D和3D线性几何内核-点和向量-内核扩展

文章目录 1.介绍1.1.鲁棒性 2.内核表示2.1.通过参数化实现泛型2.2.笛卡尔核2.3.同质核2.4.命名约定2.5.内核作为trait类2.6.选择内核和预定义内核 3.几何内核3.1.点与向量3.2.内核对象3.3.方位和相对位置 4.谓语和结构4.1.谓词4.2.结构4.3.交集和变量返回类型4.4.例子4.5.建构性…

《Java-SE-第二十三章》之单例模式

文章目录 单例模式概述饿汉模式懒汉模式单线程版懒汉单例多线程版枚举实现单例 单例模式概述 单例模式是设计模式中的一种,其作用能保证某个类在程序中只存在唯一一份实例,而不会创建多份实例。单例模式具体的实现方式, 分成 “饿汉” 和 “懒汉” 两种.。饿汉模式中的饿不并不…

PHP操作solr

1&#xff0c;php下载solr(索尔)扩展&#xff0c;phpinfo需要支持solr扩展. 2&#xff0c;安装 Solr。Solr 要求您的系统上有 Java。java –version&#xff0c;Java 的版本大于 1.6 3&#xff0c;下载solr,并安装 D:\solr。 开启solr命令&#xff1a;solr start 关闭solr命令:…

怎么进行电磁兼容的测试?

【导读】电磁骚扰源任何形式的自然或电能装置所发射的电磁能量&#xff0c;能使共享同一环境的人或其它生物受到伤害&#xff0c;或使其它设备、分系统或系统发生电磁危害&#xff0c;导致性能降低或失效&#xff0c;即称为电磁骚扰源&#xff0c;下面针对电磁兼容测试的条件与…

【Autoresizing案例2 Objective-C语言】

一、Autoresizing案例2 1.那么,接下来,咱们看第二个案例, 刚才我们设置了Autoresizing,的外面四根线,用来设置这个子控件距离父控件的距离,是固定吧 然后呢,我们给大家演示一下什么,演示一下里面这两根线, 里面有一根横的一根线,和一根竖的一根线, 这两根线是什么作…