összefoglaló
a gyári módszer új objektumokat hoz létre az ügyfél utasításai szerint. Az objektumok létrehozásának egyik módja a JavaScript – ben egy konstruktor függvény meghívása az új operátorral. Vannak azonban olyan helyzetek, amikor az ügyfél nem tudja, vagy nem szabad tudnia, hogy a több jelölt közül melyiket kell példányosítani. A gyári módszer lehetővé teszi az ügyfél számára, hogy átruházza az objektum létrehozását, miközben továbbra is ellenőrzi, hogy melyik típust kell példányosítani.
a gyári módszer fő célja a bővíthetőség. A gyári módszereket gyakran használják olyan alkalmazásokban, amelyek különböző objektumok gyűjteményeit kezelik, karbantartják vagy manipulálják, ugyanakkor számos közös tulajdonsággal (azaz módszerekkel és tulajdonságokkal) rendelkeznek. Példa erre a dokumentumok gyűjteménye Xml dokumentumok, Pdf dokumentumok és Rtf dokumentumok keverékével.
Diagram
résztvevők
- Creator — mintakódban: Factory
- a ‘factory’ objektum, amely új termékeket hoz létre
- implementálja a ‘factoryMethod’ – t, amely visszaadja az újonnan létrehozott termékeket
- AbstractProduct — nem használatos a JavaScript-ben
- deklarál egy interfészt a termékekhez
- ConcreteProduct — mintakódban: alkalmazottak
- a létrehozandó termék
- minden termék ugyanazt az interfészt támogatja (tulajdonságok és módszerek)
mintakód JavaScript-ben
ebben a JavaScript példában a gyári objektum négy különböző típusú alkalmazottat hoz létre. Minden alkalmazott típusa eltérő óradíjjal rendelkezik. A createalkalmazotti módszer a tényleges gyári módszer. Az ügyfél utasítja a gyárat, hogy milyen típusú alkalmazottat hozzon létre egy type argumentum átadásával a Factory Metódusba.
a diagramban szereplő AbstractProduct nem valósul meg, mert a Javascript nem támogatja az absztrakt osztályokat vagy interfészeket. Azonban továbbra is biztosítanunk kell, hogy minden alkalmazott típus azonos interfésszel rendelkezzen (tulajdonságok és módszerek).
négy különböző alkalmazott típus jön létre; mindegyik ugyanabban a tömbben van tárolva. Minden alkalmazottnak meg kell mondania, hogy mi az óradíja.
a log függvény egy segítő, amely összegyűjti és megjeleníti az eredményeket.
function Factory() { this.createEmployee = function (type) { var employee; if (type === "fulltime") { employee = new FullTime(); } else if (type === "parttime") { employee = new PartTime(); } else if (type === "temporary") { employee = new Temporary(); } else if (type === "contractor") { employee = new Contractor(); } employee.type = type; employee.say = function () { log.add(this.type + ": rate " + this.hourly + "/hour"); } return employee; }}var FullTime = function () { this.hourly = "$12";};var PartTime = function () { this.hourly = "$11";};var Temporary = function () { this.hourly = "$10";};var Contractor = function () { this.hourly = "$15";};// log helpervar log = (function () { var log = ""; return { add: function (msg) { log += msg + "\n"; }, show: function () { alert(log); log = ""; } }})();function run() { var employees = ; var factory = new Factory(); employees.push(factory.createEmployee("fulltime")); employees.push(factory.createEmployee("parttime")); employees.push(factory.createEmployee("temporary")); employees.push(factory.createEmployee("contractor")); for (var i = 0, len = employees.length; i Run