【设计模式】工厂模式

简介: 【设计模式】工厂模式

一、定义

一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

具体实现

1. namespace 工厂方法
2. {
3.     internal class Program
4.     {
5. static void Main(string[] args)
6.         {
7. //我要一个苹果X手机
8. IApplePhoneFactory applexPhone = new IphoneXFactory();
9. IAppleProduct X = applexPhone.getAppleProduct();
10. //我要一个苹果手机
11. IphoneXProduct iphoneX = new IphoneXProduct();
12. 
13.         }
14.     }
15. 
16. //构建苹果手机工厂接口
17. interface IApplePhoneFactory
18.     {
19. //获取具体产品
20.         IAppleProduct getAppleProduct();
21. 
22.     }
23. 
24. //抽象的产品接口
25. public interface IAppleProduct
26.     {
27. void ProductIphone();
28.     }
29. 
30. //苹果X产品的具体实现工厂
31. public class IphoneXFactory : IApplePhoneFactory
32.     {
33. //实现
34. public IAppleProduct getAppleProduct()
35.         {
36. return new IphoneXProduct();
37.         }
38.     }
39. //苹果X产品生产类
40. public class IphoneXProduct : IAppleProduct
41.     {
42. public void ProductIphone()
43.         {
44.             Console.WriteLine("我是苹果X");
45.         }
46.     }
47. }

二、应用

1、主要解决

接口选择的问题

2、什么时候使用?

当我们明确地计划不同条件下创建不同实例的时候

3、如何解决

让其子类实现工厂接口,返回的也是一个抽象的产品

4、优点

  • 一个调用者想创建一个对象,只要知道其名称就可以了
  • 扩展性高,如果增加一个产品,只要扩展一个工厂类就可以
  • 屏蔽产品的具体实现,调用者只关心产品的接口

5、缺点

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖


相关文章
Cesium系列:加载单个模型
Cesium如何加载单个三维模型数据
1024 0
|
Linux
linux启动卡一会在random: nonblocking pool is initialized之前
linux启动卡一会在random: nonblocking pool is initialized之前
1065 1
|
存储 数据处理 开发工具
用python制作好的软件放手机里
【4月更文挑战第7天】
446 4
|
JavaScript 前端开发 程序员
ts学习(1)
ts学习(1)
443 168
|
Web App开发 人工智能 前端开发
Google 浏览器中的 AI 魔法 — window.ai
本文介绍了如何在 Chrome Canary 中启用并使用设备端 AI 功能。通过下载 Chrome Canary 并启用相关 API,你可以在本地运行 AI 模型,无需互联网连接。文章详细讲解了设置步骤、确认 AI 可用性的方法以及如何使用 `window.ai` 进行文本会话。虽然目前的性能和功能还有待提升,但这一技术为未来的前端开发和智能应用提供了无限可能。
872 0
|
安全 Python
如何在Python中处理多线程之间的共享状态?
如何在Python中处理多线程之间的共享状态?
230 3
|
安全 算法 Java
多线程写入同一个文件时,如何保证写入正常
【9月更文挑战第3天】多线程写入同一个文件时,如何保证写入正常
1549 8
在Linux中,如何挂载一个ISO文件?
在Linux中,如何挂载一个ISO文件?
|
监控 安全 开发工具
git fatal: detected dubious ownership in repository at ‘xxx‘ 彻底解决方法
调整文件所有权和权限后,你应该能够无误地进行Git操作。持续的维护与监控文件系统的安全性能降低将来遇到类似问题的风险,并保证团队能够高效协作。如果你是在团队环境中工作,建议建立明确的协作规则和文件管理实践,以避免此类问题。
1780 3
|
编解码 网络协议 网络性能优化
RTP/RTCP 协议讲解
RTP/RTCP 协议讲解
2404 0