简单工厂模式属于建立型模式,又为静态工厂方法模式,是由一个工厂对象决定生产哪种产品,既是由工厂对象建立哪一个类的实例。javascript
Factory(工厂类) --> Product(具体产品) --> IProduct(抽象概念图)java
在现实生活中,咱们以生产汽车为例。假设一个汽车的代工生产商,它目前可以生产一种便民的汽车 ACar
,因为改革开放,今生产商接触了国外的汽车生产商,也逐步为国外公司代工生产汽车。此时,代工生厂商已经有本身娴熟的生产技术和流程,其如今要代工生产 BCar
, OCar
, PCar
。代码均以 TypeScript
实现。ui
abstract class ICar {
public abstract drive(): void;
}
复制代码
class ACar extends ICar {
public drive(): void {
console.log('ACar is driven.');
}
}
class BCar extends ICar {
public drive(): void {
console.log('BCar is driven.');
}
}
class OCar extends ICar {
public drive(): void {
console.log('OCar is driven.');
}
}
class PCar extends ICar {
public drive(): void {
console.log('PCar is driven.');
}
}
复制代码
class CarFactory {
public createCar(carType: string): ICar {
let myCar: ICar;
switch (carType) {
case 'aCar':
myCar = new ACar();
break;
case 'bCar':
myCar = new BCar();
break;
case 'oCar':
myCar = new OCar();
break;
case 'pCar':
myCar = new PCar();
break;
}
return myCar;
}
}
复制代码
class client {
public create(): void {
let factory: CarFactory = new CarFactory();
let oCar: OCar = factory.createCar('oCar');
oCar.dirve();
let aCar: ACar = factory.createCar('aCar');
aCar.drive();
}
}
复制代码
这样,当咱们的客户要什么车的时候,直接调用工厂类来生产所需的汽车便可。spa
优势: 使用户根据不一样的参数来得到各自对应的类实例,避免了直接实例化类,实现了低耦合。code
缺点: 可实例化的类型在编译期间就已经被肯定了,若是增长新的类型,则须要修改工厂类,违背了开放封闭原则(ASD)。简单工厂模式须要知道所要生产的种类,当子类过多或者子类层次过多时不适合使用。cdn