当前位置: 首页 > 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.lryc.cn/news/595141.html

相关文章:

  • 实时数据可视化的“心跳”设计:毫秒级延迟下的动态图表抗闪烁优化方案
  • 时空数据可视化新范式:基于Three.js的生产全流程时间轴回溯技术解析
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • 基于VSCode的nRF52840开发环境搭建
  • 机器学习中核心评估指标(准确率、精确率、召回率、F1分数)
  • 动态数据源切换
  • Android Jetpack系列组件之:LiveData(保姆级教程)
  • 动静态库原理与实战详解
  • Ubuntu 22 安装 ZooKeeper 3.9.3 记录
  • 【HarmonyOS】ArkUI - 声明式开发范式
  • 信息整合注意力IIA,通过双方向的轻量级注意力机制强化目标关键特征并抑制噪声,提升特征融合的有效性和空间位置信息的保留能力。
  • I2S音频的时钟
  • C/C++ 详谈结构体大小计算(内存对齐)
  • 移动端轻量级神经网络推理框架
  • 蚂蚁数科AI数据产业基地正式投产,携手苏州推进AI产业落地
  • 解决mac chrome无法打开本地网络中的内网网址的问题
  • ELN和LIMS的区别
  • Django关于ListView通用视图的理解(Cursor解释)
  • Java基础教程(010):面向对象中的this和就近原则
  • 算法训练营DAY37 第九章 动态规划 part05
  • 两个相机的视野 拼接算法
  • 【C++】stack和queue拓展学习
  • DevCon 6记录
  • 从 “能用“ 到 “好用“:中小制造企业数字化转型中的 IT 系统优化管理策略
  • 扬声器测试解决方案
  • AWS Certified Cloud Practitioner 认证考试总结
  • Centos安装最新docker以及ubuntu安装docker
  • 旋转目标检测(Rotated Object Detection)技术概述
  • ESP32-S3学习笔记<1>:ESP-IDF的安装与命令
  • 【编程语言】C、C++、C#深度对比:三种语言的演进历程与应用场景