一颗祝、介紹
如果我們有多個(gè)工廠辉哥,這個(gè)時(shí)候我們就需要管理我們的工廠,可以創(chuàng)建一個(gè)大工廠來分別管理小工廠耳贬。而我們抽象工廠的作用就是為工廠制定規(guī)則踏堡,制定他的結(jié)構(gòu)和功能。我們?cè)趧?chuàng)建同一類別的工廠時(shí)咒劲,只需要繼承抽象工廠的結(jié)構(gòu)顷蟆,然后進(jìn)行重寫即可。
二腐魂、優(yōu)點(diǎn)
抽象工廠可以把工廠的結(jié)構(gòu)抽象出來帐偎,訪問者不需要知道具體的實(shí)現(xiàn),只需要面向具體的結(jié)構(gòu)編程即可蛔屹。
三削樊、缺點(diǎn)
1.在結(jié)構(gòu)需要改動(dòng)的情況下,需要修改抽象工廠判导,違反開閉原則嫉父,帶來大量工作沛硅。
2.會(huì)產(chǎn)生更多的類,和更多的繼承關(guān)系。
四谬擦、示例
class FactoriesRule {//抽象工廠
constructor(){
if(new.target === FactoriesRule){
throw new Error("抽象工廠不能被實(shí)例化")
}
}
get(type){
throw new Error("抽象工廠的方法不能被調(diào)用")
}
}
class Factories extends FactoriesRule{//總工廠
constructor(){
super();
}
get(type){
var obj = {
student:new Student(),
teacher:new Teacher(),
}
if(obj[type]){
return obj[type];
}else {
throw new Error("不存在該工廠")
}
}
}
class Rule {//抽象工廠
constructor(){
if(new.target === Rule){
throw new Error("抽象工廠不能被實(shí)例化")
}
}
getList(){
throw new Error("抽象工廠的方法不能被調(diào)用")
}
}
class Student extends Rule{
constructor(){
super()
}
getList(){
return ["小明","小剛","小美","小麗"];
}
}
class Teacher extends Rule{
constructor(){
super()
}
getList(){
return ["趙老師","錢老師","孫老師","李老師"];
}
}
const factories = new Factories();//總工廠
const student = factories.get("student");//學(xué)生工廠
console.log(student.getList());//學(xué)生名單
const teacher = factories.get("teacher");//老師工廠
console.log(teacher.getList());//老師名單
如果我們的大工廠現(xiàn)在是陽光小學(xué)的工廠是己,那現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)實(shí)驗(yàn)小學(xué)的工廠就變得很簡(jiǎn)單,只需要繼承一下抽象工廠的規(guī)則然后就行重寫就可以了州既。簡(jiǎn)單一點(diǎn)就是:
class ShiYan extends FactoriesRule{//實(shí)驗(yàn)小學(xué)工廠
constructor(){
super();
}
get(type){
var obj = {
student:new Student(),
teacher:new Teacher(),
}
if(obj[type]){
return obj[type];
}else {
throw new Error("不存在該工廠")
}
}
}
const shiyan = new ShiYan();//總工廠
const shiyanStudent = shiyan.get("student");//學(xué)生工廠
console.log(shiyanStudent.getList());//學(xué)生名單
const shiyanTeacher = shiyan.get("teacher");//老師工廠
console.log(shiyanTeacher.getList());//老師名單
但是現(xiàn)在我們的工廠里面只能查詢學(xué)生和老師的名單,那我們要招生或者招聘新的老師怎么辦呢。就只能重寫我們的抽象工廠树碱,添加add的規(guī)則,這里我就不展開寫了变秦,就是對(duì)它的缺點(diǎn)做一個(gè)體現(xiàn)成榜。