JavaScript设计模式-简单工厂模式

简单工厂模式,又称静态工厂模式,是通过一个工厂对象来决定创建某一种对象类的实例。这种设计模式属于创建型模式,能够根据不同的参数返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,这些实例通常具有共同的父类。

描述

简单工厂模式的目的是定义一个创建对象的接口,让其子类自行决定实例化哪一个具体产品。工厂模式将创建过程延迟到工厂方法中,主要解决接口选择的问题,使子类能够实现工厂接口,并返回一个抽象的产品。

模式结构

  • Factory:工厂角色,负责实现创建所有实例的内部逻辑。
  • Product:抽象产品角色,是所有被创建对象的父类,描述了所有实例共有的公共接口。
  • ConcreteProduct:具体产品角色,代表创建目标,所有创建的对象都是这个角色的具体类的实例。

实现

class Animal { // 基类
    speak() {
        console.log(this.sound);
    }
}

class Dog extends Animal { // 狗
    constructor() {
        super();
        this.sound = "Woof!";
    }
}

class Cat extends Animal { // 猫
    constructor() {
        super();
        this.sound = "Meow!";
    }
}

class Bird extends Animal { // 鸟
    constructor() {
        super();
        this.sound = "Chirp!";
    }
}

class AnimalFactory { // 动物工厂
    getAnimal(animalType) {
        switch (animalType.toLowerCase()) {
            case "dog":
                return new Dog();
            case "cat":
                return new Cat();
            case "bird":
                return new Bird();
            default:
                throw new Error("未知动物类型");
        }
    }
}

const animalFactory = new AnimalFactory();

const dog = animalFactory.getAnimal("dog");
dog.speak(); // Woof!

const cat = animalFactory.getAnimal("cat");
cat.speak(); // Meow!

const bird = animalFactory.getAnimal("bird");
bird.speak(); // Chirp!

优点

  • 工厂类集中管理了产品创建的逻辑,客户端无需直接创建产品对象,只需使用工厂提供的接口,从而实现责任分离。
  • 客户端只需了解具体产品类对应的参数,无需记忆复杂的类名,简化了使用过程。
  • 可以通过配置文件或其他方式增加新的具体产品类,而无需修改客户端代码,提升了系统灵活性。

缺点

  • 工厂类集中处理所有产品的创建逻辑,一旦出现问题,可能影响整个系统。
  • 使用简单工厂模式会增加系统中类的数量,可能导致系统复杂度提高,理解难度加大。
  • 扩展系统较为困难,添加新产品时需修改工厂逻辑,可能导致工厂代码复杂,不利于维护。
  • 由于使用静态工厂方法,工厂角色无法形成基于继承的等级结构。

原文链接:

https://anyaowl.cn/blog/detail/11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值