# 抽象工厂模式-JS

# 安装一扇门

现在,我们需要安装一扇门。

我们可以去木门店买一扇木门,也可以从铁门店买一扇铁门,或者从相关商店买一扇PVC门。

另外,我还需要一个不同专业的人来安装我购买的门,例如木工来安装木门,焊工来焊接铁门等等。

现在正如你看到,它们之间存在一个从属关系,木门需要木匠,铁门需要焊工。

// Door 门类的接口
class WoondenDoor {
    getDescription() {
        console.log('我是木门');
    }
}
class IronDoor {
    getDescription() {
        console.log('我是铁门');
    }
}

// DoorFittingExpert 工人类的接口
class Carpenter {
  getDescription() {
      console.log('我只能安装木门');
  }
}
class Welder {
    getDescription() {
        console.log('我只能安装铁门');
    }
}

// 现在来实现一个抽象工厂,铁门工厂创建一个铁门和焊工、木门工厂会创建木门和木工
// DoorFactory 工厂类
class WoodenDoorFactory {
    makeDoor() {
        return new WoondenDoor();
    }
    makeFittingExpert() {
        return new Carpenter();
    }
}
class IronDoorFactory {
    makeDoor() {
        return new IronDoor();
    }
    makeFittingExpert() {
        return new Welder();
    }
}

// 客户端使用
 // *******木门工厂********
const woodenFactory = new WoodenDoorFactory();

const doorWooden = woodenFactory.makeDoor();
const expertWooden = woodenFactory.makeFittingExpert();

doorWooden.getDescription(); // 我是木门
expertWooden.getDescription(); // 我只能安装木门
 // *******铁门工厂********
const ironFactory = new IronDoorFactory();

const doorIron = ironFactory.makeDoor();
const expertIron = ironFactory.makeFittingExpert();

doorIron.getDescription(); // 我是铁门
expertIron.getDescription(); // 我只能安装铁门

你可以看到木门工厂封装了木匠和木门,铁门工厂也封装了铁门和焊工。

因此,它帮助我们确保每一个创建的门,我们不会得到一个错误的安装专家。

最近更新时间: 2020/12/3 17:14:35