创建抽象工厂类
class BaseFactory {
createStore() {
throw new Error("抽象方法【createStore】不允许直接调用,需要重写");
}
createServicePeople() {
throw new Error("抽象方法【createServicePeople】不允许直接调用,需要重写");
}
}
具体工厂类【实现类】
class AchieveBaseFactory extends BaseFactory {
createStore() {
return new HotPotStore();
}
createServicePeople() {
return new WaiterStaff();
}
}
class NewAchieveBaseFactory extends BaseFactory {
createStore() {
return new CafeStore();
}
createServicePeople() {
return new ChefStaff();
}
}
商店类【抽象类】
class Store {
getAddress() {
throw new Error("抽象方法不允许直接调用,需要重写");
}
}
class HotPotStore extends Store {
getAddress() {
return "火锅店,万达一楼77号";
}
}
class CafeStore extends Store {
getAddress() {
return "咖啡店,万象城二楼99号";
}
}
员工类【抽象类】
class Staff {
getStaff() {
throw new Error("抽象方法不允许直接调用,需要重写");
}
}
class ChefStaff extends Staff {
getStaff() {
return "厨师,张三";
}
}
class WaiterStaff extends Staff {
getStaff() {
return "服务员, 李四";
}
}
实现
我的产业
let myIndustry = new AchieveBaseFactory();
let myStore = myIndustry.createStore();
let myStoreAddress = myStore.getAddress();
console.log(myStoreAddress);
let myStaff = myIndustry.createServicePeople();
let myStaffInfo = myStaff.getStaff();
console.log(myStaffInfo);
我的新产业
let newMyIndustry = new NewAchieveBaseFactory();
let newStore = newMyIndustry.createStore();
let newAddress = newStore.getAddress();
console.log(newAddress);
let newStaff = newMyIndustry.createServicePeople();
let newStaffInfo = newStaff.getStaff();
console.log(newStaffInfo);