摘要:首先吧之前的代碼打包成一個新的設(shè)計模式公用代碼工廠模式要點工廠接口是工廠方法模式的核心,與調(diào)用者直接交互用來提供產(chǎn)品。適用場景在任何需要生成復(fù)雜對象的地方,都可以使用工廠方法模式。
工廠模式
之前講了接口,封裝,繼承,單例等,現(xiàn)在就需要應(yīng)用這些特性來完成一些設(shè)計模式了。首先吧之前的代碼打包成一個新的JS
DesignPattern.js// 設(shè)計模式公用代碼 exports.Interface = function (object, methods) { for (var i = 0, len = methods.length; i < len; i++) { if (typeof methods[i] !== "string") { throw new Error("Interface constructor expects method names to be passed in as a string."); } object[methods[i]] = function () { throw new Error(this.constructor.name + " Interface function is undefined"); }; } }; exports.Extend = function (subClass, superClass) { var F = function () { }; F.prototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass; subClass.superclass = superClass.prototype; if (superClass.prototype.constructor == Object.prototype.constructor) { superClass.prototype.constructor = superClass; } } exports.Clone = function (object) { function F() { } F.prototype = object; return new F; } exports.Augment = function (receivingClass, givingClass) { if (arguments[2]) { // Only give certain methods. for (var i = 2, len = arguments.length; i < len; i++) { receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]]; } } else { // Give all methods. for (methodName in givingClass.prototype) { if (!receivingClass.prototype[methodName]) { receivingClass.prototype[methodName] = givingClass.prototype[methodName]; } } } }工廠模式要點
1.工廠接口是工廠方法模式的核心,與調(diào)用者直接交互用來提供產(chǎn)品。
2.工廠實現(xiàn)決定如何實例化產(chǎn)品,是實現(xiàn)擴(kuò)展的途徑,需要有多少種產(chǎn)品,就需要有多少個具體的工廠實現(xiàn)。
適用場景:1.在任何需要生成復(fù)雜對象的地方,都可以使用工廠方法模式。有一點需要注意的地方就是復(fù)雜對象適合使用工廠模式,而簡單對象,無需使用工廠模式。
2.工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現(xiàn)的尤為明顯。假如調(diào)用者自己組裝產(chǎn)品需要增加依賴關(guān)系時,可以考慮使用工廠模式。將會大大降低對象之間的耦合度。
3.當(dāng)需要系統(tǒng)有比較好的擴(kuò)展性時,可以考慮工廠模式,不同的產(chǎn)品用不同的實現(xiàn)工廠來組裝。
代碼var DP = require("./DesignPattern.js"); function CarFactory() {//定義工廠 this.run = function () { console.log(this.productCar()+"啟動"); } DP.Interface(this, ["productCar"]); } function PorscheFactory() {//實例化保時捷工廠 this.__proto__ = new CarFactory(); this.productCar = function () { return "保時捷"; } } function TractorFactory() {//實例化拖拉機(jī)工廠并不重寫接口測試接口定義 this.__proto__ = new CarFactory(); } var Porsche = new PorscheFactory(); Porsche.run(); var Tractor = new TractorFactory(); Tractor.run();總結(jié)
由于javascript沒有原生接口,所以需要自己想方法來實現(xiàn)接口這個原則。使用了接口以后就可以方便實現(xiàn)工廠模式。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79456.html
摘要:前言在這次的博客中我們將著重于的許多集成性功能來討論中的種種設(shè)計模式。裝飾器模式裝飾器模式是為了在原有功能上加入新功能,在中絕對屬于使用最頻繁架構(gòu)中最核心的模式,等都是通過裝飾器模式來完成擴(kuò)展的。 前言 在這次的博客中我們將著重于Junit的許多集成性功能來討論Junit中的種種設(shè)計模式??梢哉fJunit的實現(xiàn)本身就是GOF設(shè)計原則的范例教本,下面就讓我們開始吧。 裝飾器模式 裝飾器...
摘要:大潮來襲前端開發(fā)能做些什么去年谷歌和火狐針對提出了的標(biāo)準(zhǔn),顧名思義,即的體驗方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁,新的標(biāo)準(zhǔn)讓我們可以使用語言來開發(fā)。 VR 大潮來襲 --- 前端開發(fā)能做些什么 去年谷歌和火狐針對 WebVR 提出了 WebVR API 的標(biāo)準(zhǔn),顧名思義,WebVR 即 web + VR 的體驗方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁,新的 API 標(biāo)準(zhǔn)讓我們可以使用 ...
摘要:二用操作符構(gòu)造對象屬性名屬性值屬性名屬性值屬性名屬性值屬性名屬性值方法名方法名首先用創(chuàng)建一個空對象,然后用多條語句給對象添加屬性方法。他的寫法與三用函數(shù)聲明的方式構(gòu)造對象比較像,但是稍有不同。 -- 新手向知識,就不用ES6寫法了。 一、字面量聲明 var obj = { 屬性名1 : 屬性值, 屬性名2 : 屬性值, 屬性名3 : 屬性...
摘要:簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類。中的就是簡單工廠模式的體現(xiàn),根據(jù)傳入一個唯一的標(biāo)識來獲得對象,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個要根據(jù)具體情況來定。中的就是典型的工廠方法模式。 showImg(https://segmentfault.com/img/bVbwbd9?w=640&h=492); 一. 簡單工廠又叫做靜態(tài)工廠方法(...
閱讀 2075·2023-04-25 22:58
閱讀 1427·2021-09-22 15:20
閱讀 2706·2019-08-30 15:56
閱讀 2000·2019-08-30 15:54
閱讀 2117·2019-08-29 12:31
閱讀 2741·2019-08-26 13:37
閱讀 605·2019-08-26 13:25
閱讀 2107·2019-08-26 11:58