本文转载自微信公众号「全栈修仙之路」,作者阿宝哥 。转载本文请联系全栈修仙之路公众号。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网站空间、营销软件、网站建设、抚松网站维护、网站推广。
在现实生活中,工厂是负责生产产品的,比如牛奶、面包或礼物等,这些产品满足了我们日常的生理需求。此外,在日常生活中,我们也离不开大大小小的系统,这些系统是由不同的组件对象构成。
作为一名 Web 软件开发工程师,在软件系统的设计与开发过程中,我们可以利用设计模式来提高代码的可重用性、可扩展性和可维护性。在众多设计模式当中,有一种被称为工厂模式的设计模式,它提供了创建对象的最佳方式。
工厂模式可以分为三类:
本文阿宝哥将介绍简单工厂模式与工厂方法模式,而抽象工厂模式将在后续的文章中介绍,下面我们先来介绍简单工厂模式。
一、简单工厂模式
1.1 简单工厂模式简介
简单工厂模式又叫 静态方法模式,因为工厂类中定义了一个静态方法用于创建对象。简单工厂让使用者不用知道具体的参数就可以创建出所需的 ”产品“ 类,即使用者可以直接消费产品而不需要知道产品的具体生产细节。
相信对于刚接触简单工厂模式的小伙伴来说,看到以上的描述可能会觉得有点抽象。这里为了让小伙伴更好地理解简单工厂模式,阿宝哥以用户买车为例,来介绍一下 BMW 工厂如何使用简单工厂模式来生产。
在上图中,阿宝哥模拟了用户购车的流程,pingan 和 qhw 分别向 BMW 工厂订购了 BMW730 和 BMW840 型号的车型,接着工厂按照对应的模型进行生产并在生产完成后交付给用户。接下来,阿宝哥将介绍如何使用简单工厂来描述 BMW 工厂生产指定型号车子的过程。
1.2 简单工厂模式实战
定义 BMW 抽象类
- abstract class BMW {
- abstract run(): void;
- }
创建 BMW730 类(BMW 730 Model)
- class BMW730 extends BMW {
- run(): void {
- console.log("BMW730 发动咯");
- }
- }
创建 BMW840 类(BMW 840 Model)
- class BMW840 extends BMW {
- run(): void {
- console.log("BMW840 发动咯");
- }
- }
创建 BMWFactory 工厂类
- class BMWFactory {
- public static produceBMW(model: "730" | "840"): BMW {
- if (model === "730") {
- return new BMW730();
- } else {
- return new BMW840();
- }
- }
- }
生产并发动 BMW730 和 BMW840
- const bmw730 = BMWFactory.produceBMW("730");
- const bmw840 = BMWFactory.produceBMW("840");
- bmw730.run();
- bmw840.run();
以上代码运行后的输出结果为:
- BMW730 发动咯
- BMW840 发动咯
通过观察以上的输出结果,我们可以知道我们的 BMWFactory 已经可以正常工作了。在 BMWFactory 类中,阿宝哥定义了一个 produceBMW() 方法,该方法会根据传入的模型参数来创建不同型号的车子。
看完简单工厂模式实战的示例,你是不是觉得简单工厂模式还是挺好理解的。那么什么场景下使用简单工厂模式呢?要回答这个问题我们需要来了解一下简单工厂的优缺点。
1.3 简单工厂模式优缺点
1.3.1 优点
1.3.2 缺点
1.4 简单工厂模式应用场景
在满足以下条件下可以考虑使用简单工厂模式:
介绍完简单工厂模式,接下来我们来介绍本文的主角 ”工厂方法模式“。
二、工厂方法模式
2.1 工厂方法简介
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫多态工厂(Polymorphic Factory)模式,它属于类创建型模式。
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象, 这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
在上图中,阿宝哥模拟了用户购车的流程,pingan 和 qhw 分别向 BMW 730 和 BMW 840 工厂订购了 BMW730 和 BMW840 型号的车型,接着工厂按照对应的模型进行生产并在生产完成后交付给用户。接下来,阿宝哥来介绍如何使用工厂方法来描述 BMW 工厂生产指定型号车子的过程。
2.2 工厂方法实战
定义 BMW 抽象类
- abstract class BMW {
- abstract run(): void;
- }
创建 BMW730 类(BMW 730 Model)
- class BMW730 extends BMW {
- run(): void {
- console.log("BMW730 发动咯");
- }
- }
创建 BMW840 类(BMW 840 Model)
- class BMW840 extends BMW {
- run(): void {
- console.log("BMW840 发动咯");
- }
- }
定义 BMWFactory 接口
- interface BMWFactory {
- produceBMW(): BMW;
- }
创建 BMW730Factory 类
- class BMW730Factory implements BMWFactory {
- produceBMW(): BMW {
- return new BMW730();
- }
- }
创建 BMW840Factory 类
- class BMW840Factory implements BMWFactory {
- produceBMW(): BMW {
- return new BMW840();
- }
- }
生产并发动 BMW730 和 BMW840
- const bmw730Factory = new BMW730Factory();
- const bmw840Factory = new BMW840Factory();
- const bmw730 = bmw730Factory.produceBMW();
- const bmw840 = bmw840Factory.produceBMW();
- bmw730.run();
- bmw840.run();
通过观察以上的输出结果,我们可以知道我们的 BMW730Factory 和 BMW840Factory 工厂已经可以正常工作了。相比前面的简单工厂模式,工厂方法模式通过创建不同的工厂来生产不同的产品。下面我们来看一下工厂方法有哪些优缺点。
2.3 工厂方法优缺点
2.3.1 优点
2.3.2 缺点
最后我们来简单介绍一下工厂方法的应用场景。
2.4 工厂方法应用场景
三、参考资源
简单工厂模式(SimpleFactoryPattern)
design-patterns - simple_factory
工厂方法模式(Factory Method)
当前标题:Typescript设计模式之工厂方法
本文地址:http://www.shufengxianlan.com/qtweb/news20/112320.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联