在现实生活中,工厂是负责生产产品的,好比牛奶、面包或礼物等,这些产品知足了咱们平常的生理需求。此外,在平常生活中,咱们也离不开大大小小的系统,这些系统是由不一样的组件对象构成。html
而做为一名 Web 软件开发工程师,在软件系统的设计与开发过程当中,咱们能够利用设计模式来提升代码的可重用性、可扩展性和可维护性。在众多设计模式当中,有一种被称为工厂模式的设计模式,它提供了建立对象的最佳方式。typescript
工厂模式能够分为三类:设计模式
本文阿宝哥将介绍简单工厂模式与工厂方法模式,而抽象工厂模式将在后续的文章中介绍,下面咱们先来介绍简单工厂模式。并发
简单工厂模式又叫 静态方法模式,由于工厂类中定义了一个静态方法用于建立对象。简单工厂让使用者不用知道具体的参数就能够建立出所需的 ”产品“ 类,即便用者能够直接消费产品而不须要知道产品的具体生产细节。ui
相信对于刚接触简单工厂模式的小伙伴来讲,看到以上的描述可能会以为有点抽象。这里为了让小伙伴更好地理解简单工厂模式,阿宝哥以用户买车为例,来介绍一下 BMW 工厂如何使用简单工厂模式来生产🚗。spa
在上图中,阿宝哥模拟了用户购车的流程,pingan 和 qhw 分别向 BMW 工厂订购了 BMW730 和 BMW840 型号的车型,接着工厂按照对应的模型进行生产并在生产完成后交付给用户。接下来,阿宝哥将介绍如何使用简单工厂来描述 BMW 工厂生产指定型号车子的过程。设计
abstract class BMW { abstract run(): void; }
class BMW730 extends BMW { run(): void { console.log("BMW730 发动咯"); } }
class BMW840 extends BMW { run(): void { console.log("BMW840 发动咯"); } }
class BMWFactory { public static produceBMW(model: "730" | "840"): BMW { if (model === "730") { return new BMW730(); } else { return new BMW840(); } } }
const bmw730 = BMWFactory.produceBMW("730"); const bmw840 = BMWFactory.produceBMW("840"); bmw730.run(); bmw840.run();
以上代码运行后的输出结果为:3d
BMW730 发动咯 BMW840 发动咯
经过观察以上的输出结果,咱们能够知道咱们的 BMWFactory 已经能够正常工做了。在 BMWFactory 类中,阿宝哥定义了一个 produceBMW()
方法,该方法会根据传入的模型参数来建立不一样型号的车子。code
看完简单工厂模式实战的示例,你是否是以为简单工厂模式仍是挺好理解的。那么什么场景下使用简单工厂模式呢?要回答这个问题咱们须要来了解一下简单工厂的优缺点。htm
了解完简单工厂的优缺点,咱们来看一下它的应用场景。
在知足如下条件下能够考虑使用简单工厂模式:
介绍完简单工厂模式,接下来咱们来介绍本文的主角 ”工厂方法模式“。
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫多态工厂(Polymorphic Factory)模式,它属于类建立型模式。
在工厂方法模式中,工厂父类负责定义建立产品对象的公共接口,而工厂子类则负责生成具体的产品对象, 这样作的目的是将产品类的实例化操做延迟到工厂子类中完成,即经过工厂子类来肯定究竟应该实例化哪个具体产品类。
在上图中,阿宝哥模拟了用户购车的流程,pingan 和 qhw 分别向 BMW 730 和 BMW 840 工厂订购了 BMW730 和 BMW840 型号的车型,接着工厂按照对应的模型进行生产并在生产完成后交付给用户。接下来,阿宝哥来介绍如何使用工厂方法来描述 BMW 工厂生产指定型号车子的过程。
abstract class BMW { abstract run(): void; }
class BMW730 extends BMW { run(): void { console.log("BMW730 发动咯"); } }
class BMW840 extends BMW { run(): void { console.log("BMW840 发动咯"); } }
interface BMWFactory { produceBMW(): BMW; }
class BMW730Factory implements BMWFactory { produceBMW(): BMW { return new BMW730(); } }
class BMW840Factory implements BMWFactory { produceBMW(): BMW { return new BMW840(); } }
const bmw730Factory = new BMW730Factory(); const bmw840Factory = new BMW840Factory(); const bmw730 = bmw730Factory.produceBMW(); const bmw840 = bmw840Factory.produceBMW(); bmw730.run(); bmw840.run();
经过观察以上的输出结果,咱们能够知道咱们的 BMW730Factory 和 BMW840Factory 工厂已经能够正常工做了。相比前面的简单工厂模式,工厂方法模式经过建立不一样的工厂来生产不一样的产品。下面咱们来看一下工厂方法有哪些优缺点。
最后咱们来简单介绍一下工厂方法的应用场景。