如何更新网站建立网站三大基础

当前位置: 首页 > news >正文

如何更新网站,建立网站三大基础,视频号怎么运营,杭州的互联网企业一、概述 工厂模式#xff08;Factory Pattern#xff09;是一种创建型设计模式#xff0c;它提供了一种创建对象的最佳方式。在C#中#xff0c;工厂模式通过定义一个公共接口或抽象类来创建对象#xff0c;而具体的对象创建则由工厂类来实现。 工厂模式主要包含三个角色… 一、概述 工厂模式Factory Pattern是一种创建型设计模式它提供了一种创建对象的最佳方式。在C#中工厂模式通过定义一个公共接口或抽象类来创建对象而具体的对象创建则由工厂类来实现。 工厂模式主要包含三个角色

  1. 抽象产品Abstract Product定义了产品的接口具体产品需要实现这个接口。
  2. 具体产品Concrete Product实现了抽象产品接口的具体类。
  3. 工厂Factory负责创建具体产品的工厂类通常包含一个创建产品的方法。 工厂模式的优点 封装性工厂模式隐藏了创建对象的细节只需要知道创建对象的入口而无需关注创建过程它提供了把对象创建与对象使用分离的方法。 可扩展性在工厂模式中添加一个新的产品类型只需要在工厂类中添加一个创建新产品的方法不会影响到现有代码。 复杂对象的创建工厂模式允许创建复杂的对象把对象的创建过程和使用过程分开可以使代码更容易维护。 解耦工厂模式减少了客户端和实际产品类之间的耦合可以独立更改实现不会影响到其他部分。 总之工厂模式是一种常用的对象创建型模式具有封装性可扩展性复杂对象的创建和解耦等优点适用于解决复杂对象创建问题。 工厂模式的缺点 增加了系统复杂度因为要把创建对象的过程抽象成接口所以会增加系统复杂度。 父类被污染由于工厂模式中的工厂类继承自抽象类如果需要扩展父类的功能可能会把父类的代码污染。 不符合开闭原则工厂模式的实现要求修改工厂类代码在添加新产品时可能需要修改工厂类这不符合开闭原则。 总的来说工厂模式虽然有一些缺点但是它还是一种非常有用的设计模式在很多情况下都可以帮助我们简化代码提高代码质量。 上面这些介绍几乎都是没什么用的文案目的是为了做人类高质量文章各位可以不看当然你想看也没问题只是看了和没看效果是一样的。 二、代码的实现 新建一个控制台项目代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 工厂模式 {internal class Program{static void Main(string[] args){Factory factory new Factory();// 创建具体产品AIProduct productA factory.CreateProduct(A);productA.Operation(); // 输出具体产品A的操作// 创建具体产品BIProduct productB factory.CreateProduct(B);productB.Operation(); // 输出具体产品B的操作Console.ReadKey();}}// 抽象产品接口public interface IProduct{void Operation();}// 具体产品类Apublic class ConcreteProductA : IProduct{public void Operation(){Console.WriteLine(具体产品A的操作);}}// 具体产品类Bpublic class ConcreteProductB : IProduct{public void Operation(){Console.WriteLine(具体产品B的操作);}}// 工厂类public class Factory{public IProduct CreateProduct(string productType){switch (productType){case A:return new ConcreteProductA();case B:return new ConcreteProductB();default:throw new ArgumentException(无效的产品类型);}}} }运行 工厂模式的代码也是非常的简单这里就不做解析了下面直接上一个案例吧。  三、案例 由于工厂模式的主要作用是创建实例那么就以公司的年会抽奖为案例吧首先随机设置一个抽奖人然后由系统随机奖品奖品有现金手机平板电脑抽奖完成后公布抽奖结果。 新建一个 Winform 项目将项目的输入类型改为控制台输出你可能会问“这么简单的操作干嘛介绍啊”你还别说上次就有人问我你这是控制台项目还是 Winform 项目控制台从哪里出来的也不写清楚 界面就两个按钮源码我就不上传了 新建一个类 Prize加入下面代码下面好几个类写在一起了我也懒的分了 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 工厂模式案例 {/// summary/// 奖品的类型/// /summarypublic enum PrizeType{/// summary/// 现金/// /summaryMoney,/// summary/// 手机/// /summaryMobilePhone,/// summary/// 平板电脑/// /summaryIpad}/// summary/// 奖品/// /summarypublic abstract class Prize{/// summary/// 数量/// /summarypublic int Number { get; set; }/// summary/// 获奖人/// /summarypublic string Awardee { get; set; }/// summary/// 奖品类型/// /summarypublic PrizeType PrizeTypes { get; set; }/// summary/// 随机数/// /summarypublic Random Randoms { get; private set; } new Random();/// summary/// 操作/// /summarypublic abstract void Operation();/// summary/// 设置获奖人/// /summary/// param nameAwardee/parampublic abstract void SetAwardee(string Awardee);}/// summary/// 现金/// /summarypublic class Money : Prize{public override void Operation(){Number Randoms.Next(100, 1000);PrizeTypes PrizeType.Money;Console.WriteLine(得到奖品 类型{0}数量是{1}, PrizeTypes, Number);}public override void SetAwardee(string awardee){Awardee awardee;Console.WriteLine(当前奖品的获得者是{0}, awardee);}}/// summary/// 手机/// /summarypublic class MobilePhone : Prize{public override void Operation(){Number Randoms.Next(1, 3);PrizeTypes PrizeType.MobilePhone;Console.WriteLine(得到奖品 类型{0}数量是{1}, PrizeTypes, Number);}public override void SetAwardee(string awardee){Awardee awardee;Console.WriteLine(当前奖品的获得者是{0}, awardee);}}/// summary/// 平板电脑/// /summarypublic class Ipad : Prize{public override void Operation(){Number Randoms.Next(1, 3);PrizeTypes PrizeType.Ipad;Console.WriteLine(得到奖品 类型{0}数量是{1}, PrizeTypes, Number);}public override void SetAwardee(string awardee){Awardee awardee;Console.WriteLine(当前奖品的获得者是{0}, awardee);}}public class Factory{public static Prize CreateProduct(PrizeType prizeType){switch (prizeType){case PrizeType.Money:return new Money();case PrizeType.MobilePhone:return new MobilePhone();case PrizeType.Ipad:return new Ipad();default:return null;}}private Factory() { }} }Form1 的代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 工厂模式案例 {public partial class Form1 : Form{public Form1(){InitializeComponent();}//随机数private Random Randoms new Random();//抽奖人列表private Liststring NameList new Liststring() { 张三, 李四, 老王, 柱子, 狗剩, 铁蛋 };//当前的抽奖人private string Awardee string.Empty;//奖品类型枚举的长度private int PrizeTypeCount 0;private void Form1_Load(object sender, EventArgs e){PrizeTypeCount System.Enum.GetNames(new PrizeType().GetType()).Length;}//抽奖人private void button1_Click(object sender, EventArgs e){int index Randoms.Next(0, NameList.Count);Awardee NameList[index];Console.WriteLine(当前的抽奖人是{0}, Awardee);}//抽奖private void button2_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(Awardee)){Console.WriteLine(请先确认抽奖人);return;}int index Randoms.Next(0, PrizeTypeCount);PrizeType prizeType (PrizeType)index;Prize prize Factory.CreateProduct(prizeType);prize.Operation();prize.SetAwardee(Awardee);}} }运行 这样一个简单的抽奖系统就实现了有什么疑问或者建议欢迎留言评论。 end