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

【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)

一种创建型设计模式。

特点:解耦客户端和对象的创建,集中管理对象和易于拓展对象等等,但是由于若往系统里增加对象,则需要修改原有的工厂类,因此不符合开闭原则。

优点:

  1. 解耦客户端和具体的类;
  2. 集中管理,所有的对象创建都在工厂中管理和维护;
  3. 易于扩展,添加新对象时,不需要对客户端代码进行大规模修改;
  4. 使用简单工厂模式还可以让代码更加清晰。

缺点:

  1. 违反了单一职责原则,创建对象的逻辑被集中在了一个工厂类中,会导致类的职责过于复杂;
  2. 引入新的对象时,工厂类需要修改,不符合开闭原则。

适用场景:

  1. 需要让对象的创建变得简单;
  2. 不希望客户端关心具体的实现类;

using UnityEngine;public interface IAnimal
{void Speak();
}
public class Dog : IAnimal
{public void Speak(){Debug.Log("汪汪汪");}
}
public class Cat : IAnimal
{public void Speak(){Debug.Log("喵喵喵");}
}
/// <summary>
/// 生成动物的简单工厂
/// </summary>
public class AnimalFactory
{public static IAnimal CreateAnimal(string animalType){switch (animalType){case "dog":return new Dog();case "cat":return new Cat();default:Debug.Log("工厂中没有这种动物类");return null;}}
}
/// <summary>
/// 客户端
/// </summary>
public class Client
{public static void Main(string[] args){IAnimal dog = AnimalFactory.CreateAnimal("dog");dog.Speak();IAnimal cat = AnimalFactory.CreateAnimal("cat");cat.Speak();//创建失败,没有这样的类IAnimal rabbit = AnimalFactory.CreateAnimal("rabbit");rabbit.Speak();}
}
http://www.dtcms.com/a/290646.html

相关文章:

  • Spring Boot注解详解
  • PDF 表单字段属性详解
  • 泛型:C#中的类型抽象艺术
  • 三款适合户外探险、应急救援的智能三防手机,各有各的优势
  • kafka 日志索引 AbstractIndex
  • Elasticsearch X-Pack安全功能未启用的解决方案
  • 模型系列(篇一)-Bert
  • 暑期算法训练.5
  • 分布在内侧内嗅皮层(MEC)的带状细胞对NLP中的深层语义分析有什么积极的影响和启示
  • [硬件电路-64]:模拟器件 -二极管在稳压电路中的应用
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 乘性季节性 Multiplicative Seasonality
  • JS实现矩阵左右旋转90度
  • uniapp app pdf.js报错:Uncaught SyntaxError:Unexpected token ‘{‘
  • 5道挑战题writup
  • 单体VS微服务:如何选择最适合的架构?
  • 人工智能之数学基础:事件间的关系
  • Leetcode力扣解题记录--第189题(巧思数组翻转)
  • 【MySQL】Linux配置MySQL Windows远程连接
  • 客流分析核心算法 trajectory_event_analyzer数据结构
  • Python-数据库概念-pymysql-元编程-SQLAlchemy-学习笔记
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • 【React】npm install报错npm : 无法加载文件 D:\APP\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • 玩转Rocky Linux 9 部署Redis指南
  • WPF实现加载初始页面后跳转到主界面并销毁初始页面资源
  • 在 WPF 启动界面中心加载 GIF 动图
  • 人工智能真的能编程吗?研究勾勒出自主软件工程的障碍
  • Next.js 知识点
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • GC9112低压单通道全桥驱动器芯片解析:小封装大能量
  • uniapp扫描二维码反色处理