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

【设计模式C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)

是一种创建型设计模式。

特点是解耦客户端对对象的创建,使用抽象的工厂类,让类的扩展更加容易,相比简单工厂模式更具有灵活性和扩展性。

优点:

  1. 工厂方法模式将对象的创建与使用分开,使客户端代码无需关心对象是如何创建的;
  2. 扩展性强,且符合开闭原则。需要添加新的实现类时,无需修改原有代码,只需添加一个相应的工厂类即可;
  3. 支持多态,在运行时子类可以被替换,从而支持多态编程;
  4. 易于修改和维护;
  5. 易于管理复杂的创建逻辑。

缺点:

  1. 工厂类增加,导致系统的复杂性增加;
  2. 导致类的层次结构更加复杂;

适用场景:

  1. 需要创建的产品种类较多的场景;
  2. 系统需要多次动态扩展产品时;
  3. 需要将类的实例化过程与客户端分离开。

示例:

public interface IAnimal
{void Speak();
}
public class Dog : IAnimal
{public void Speak(){Console.WriteLine("Woof! Woof!");}
}
public class Cat : IAnimal
{public void Speak(){Console.WriteLine("Meow! Meow!");}
}
/// <summary>
/// 抽象工厂类
/// </summary>public abstract class AnimalFactory
{public abstract IAnimal CreateAnimal();
}
/// <summary>
/// 工厂实现类
/// </summary>
public class DogFactory : AnimalFactory
{public override IAnimal CreateAnimal(){return new Dog();}
}
/// <summary>
/// 工厂实现类
/// </summary>
public class CatFactory : AnimalFactory
{public override IAnimal CreateAnimal(){return new Cat();}
}
/// <summary>
/// 客户端
/// </summary>
public class Client
{public static void Main(string[] args){   //用DogFactory创建dog对象AnimalFactory dogFactory = new DogFactory();IAnimal dog = dogFactory.CreateAnimal();dog.Speak();//CatFactory创建cat对象AnimalFactory catFactory = new CatFactory();IAnimal cat = catFactory.CreateAnimal();cat.Speak();}
}
http://www.lryc.cn/news/595102.html

相关文章:

  • 力扣15:三数之和
  • 测量误差溯源:系统误差与随机误差的数学建模与分离方法
  • 结构型模式-架构解耦与扩展实践
  • 清理磁盘空间
  • Windows容器网络的带宽限制QoS策略配置
  • CPO光模块能取代传统光模块吗?
  • 量子算法可视化工具:撕裂量子黑箱的破壁者
  • 量子生成对抗网络:量子计算与生成模型的融合革命
  • 云原生安全工具:数字基础设施的免疫长城
  • 苹果Find My新增智能位置共享模式​​
  • 自动化计算机经过加固后有什么好处?
  • Android开发中ANR治理方案
  • Java -- 自定义异常--Wrapper类--String类
  • ansible批量部署zabbix客户端
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • 机器学习中的数据预处理:从入门到实践
  • DAY19 常见的特征筛选算法
  • 【初识Qt】
  • 鸿蒙开发中与 AI 编码助手的共处之道(ArkTS 视角)
  • 第16次:用户浏览记录
  • 关于java8里边Collectors.toMap()的空限制
  • React探索高性能Tree树组件实现——react-window、react-vtree
  • Spring Boot 3企业级架构设计:从模块化到高并发实战,9轮技术博弈(含架构演进解析)
  • spring boot windows linux 控制台 文件 乱码问题详解
  • Python100个库分享第37个—BeautifulSoup(爬虫篇)
  • 基于R语言的分位数回归技术应用
  • TOGAF之架构标准规范-机遇与解决方案
  • Implicit Reward as the Bridge: A Unified View of SFTand DPO Connections
  • React基础(1)
  • 深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码