千家信息网

.NET简单的工厂模式讲解

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解".NET简单的工厂模式讲解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习".NET简单的工厂模式讲解"吧!简单工厂模式介绍:简单工厂模式是
千家信息网最后更新 2026年11月01日.NET简单的工厂模式讲解

本篇内容主要讲解".NET简单的工厂模式讲解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习".NET简单的工厂模式讲解"吧!

简单工厂模式介绍:

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

结构模式图:

角色分类:

工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

引入实际情况:

如果有一个住户管理系统,里面的住户类型是可变的,每一种租户类型的租金计算公式都存在差异

A类型的住户租金额=天数*单价+绩效*0.005

B类型的住户租金额=月份*(每月价格+performance*0.001)

分析:

1. 商店存在共有的计算方法,这是实体商店的行为,然而他们的行为的方式不一样,所有我们抽象商店类,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory.App.IFactroy{    public interface Ishop  {    double Getrent(int days, double dayprice, double performance);  }}

2.在抽象了商店之后,我们要对创建具体产品类,这里就是具体的类型商店,里面实现该商店的行为方法。创建A类型的商店

using SimpleFactory.App.IFactroy;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory.App.product{  //A类型的商店的创建  public class Ashop:Ishop  {    ///     /// /// A类型商店租金额,天数*单价+绩效*0.005    ///     /// 天数    /// 每天单价    /// 日平均绩效    ///     public double Getrent(int days, double dayprice, double performance)    {      Console.WriteLine("A商店的租金算法");      return days * dayprice + performance * 0.01;    }  }}

3.创建B类型的商店:

using SimpleFactory.App.IFactroy;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory.App.product{  ///   /// B类型的商店的创建  ///   public class Bshop:Ishop  {        ///     /// B类型商店的租金=月份*(每月价格+performance*0.001)    ///     /// 月数    /// 月单价    /// 月平均绩效    ///     public double Getrent(int month, double monthprice, double performance)    {      Console.WriteLine("B商店的租金算法");      return month * (monthprice + performance * 0.001);    }  }}

4. 在创建号类型商店并实现方法后,思考在什么情况下如何创建那种对象,于是简单工厂模式中最核心的部分:工厂类出来了

using SimpleFactory.App.IFactroy;using SimpleFactory.App.product;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory.App.factoryMethod{  public class factorymethod  {    public Ishop CreateShow(string show)    {      switch (show.Trim().ToLower())      {        case"ashop":          return new Ashop();        case "bshop":          return new Ashop();        default:          throw new Exception("该商店不存在");      }    }  }}

5.然后就根据当前的商店类型进行判断,该类型的商店应该进行哪一种算法:

using SimpleFactory.App.factoryMethod;using SimpleFactory.App.IFactroy;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory.App{  class Program  {    static void Main(string[] args)    {      Ishop As;      factorymethod afm = new factorymethod();      As = afm.CreateShow("ashop"); //a 类型的某商店      double total = As.Getrent(30, 300, 2000);   //30 天/100元 日平均绩效为2000      Console.WriteLine("该A类型商店的租金为:" + total);      Console.WriteLine("=============");      Ishop Bs;      factorymethod bfm = new factorymethod();      Bs = bfm.CreateShow("bshop"); //b 类型的某商店      total = Bs.Getrent(3, 3000, 60000);     //3 月/4000元 月平均绩效为60000      Console.WriteLine("该B类型商店的租金为:" + total);      Console.ReadKey();    }  }}

到这里我们实现了客户要求的两种类型商店的算法的需求,但是作为一种好的设计架构,还应该考虑到后面的需求变革,如果客户现在又增加了C类型商店和D类型商店,它们的算法要求又不一样,这个时候我们就需要进行C,D类型商店的创建,并继承Ishop接口,实现里面的方法,同时还得继续修改工厂类在switc中增加case进行捕捉创建相应的商店对象,一旦出现这样的情况,是不利于程序的扩展性和项目后期的维护性的。

优点:

  • 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对 象的尴尬局面中摆脱出来。

  • 外界与具体类隔离开来,偶合性低。

  • 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:

  • 工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则

  • 虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。

到此,相信大家对".NET简单的工厂模式讲解"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

商店 工厂 类型 模式 对象 方法 租金 绩效 实例 算法 角色 产品 住户 单价 外界 品类 天数 情况 行为 金额 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网企业 广州百单互联网科技有限公司 互联网科技战争 没上市的科技互联网公司 麻工互联网科技 九亚互联网科技 科技互联网公司logo 一五八零互联网科技 上海电发互联网科技有限公司 成都玖崟互联网科技有限公司乐商圈怎么样 常德市电业局互联网科技部 中化能源互联网科技招聘 青岛科技大学互联网大赛研究生 广州市恰铎互联网科技有限公司 国大互联网教育科技有限公司工作 互联网时代的科技公司 互联网公司属于科技吗 科技互联网公司两年变化 互联网科技对化妆品行业 山东亿川互联网科技有限责任公司 厦门中拓互联网络科技有限公司 互联网科技咨询 联恩商钥互联网科技有限公司 博兴的互联网电子科技公司 荆州市昕露互联网络科技有限公司 中国科技创新与世界互联网大会 互联网在线教育科技创业 互联网风格科技公司名称 版纳互联网科技选哪家 绵阳真晨互联网科技有限公司
0