摘要:首先吧之前的代碼打包成一個(gè)新的設(shè)計(jì)模式公用代碼工廠模式要點(diǎn)工廠接口是工廠方法模式的核心,與調(diào)用者直接交互用來(lái)提供產(chǎn)品。適用場(chǎng)景在任何需要生成復(fù)雜對(duì)象的地方,都可以使用工廠方法模式。
工廠模式
之前講了接口,封裝,繼承,單例等,現(xiàn)在就需要應(yīng)用這些特性來(lái)完成一些設(shè)計(jì)模式了。首先吧之前的代碼打包成一個(gè)新的JS
DesignPattern.js// 設(shè)計(jì)模式公用代碼 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]; } } } }工廠模式要點(diǎn)
1.工廠接口是工廠方法模式的核心,與調(diào)用者直接交互用來(lái)提供產(chǎn)品。
2.工廠實(shí)現(xiàn)決定如何實(shí)例化產(chǎn)品,是實(shí)現(xiàn)擴(kuò)展的途徑,需要有多少種產(chǎn)品,就需要有多少個(gè)具體的工廠實(shí)現(xiàn)。
適用場(chǎng)景:1.在任何需要生成復(fù)雜對(duì)象的地方,都可以使用工廠方法模式。有一點(diǎn)需要注意的地方就是復(fù)雜對(duì)象適合使用工廠模式,而簡(jiǎn)單對(duì)象,無(wú)需使用工廠模式。
2.工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現(xiàn)的尤為明顯。假如調(diào)用者自己組裝產(chǎn)品需要增加依賴關(guān)系時(shí),可以考慮使用工廠模式。將會(huì)大大降低對(duì)象之間的耦合度。
3.當(dāng)需要系統(tǒng)有比較好的擴(kuò)展性時(shí),可以考慮工廠模式,不同的產(chǎn)品用不同的實(shí)現(xiàn)工廠來(lái)組裝。
代碼var DP = require("./DesignPattern.js"); function CarFactory() {//定義工廠 this.run = function () { console.log(this.productCar()+"啟動(dòng)"); } DP.Interface(this, ["productCar"]); } function PorscheFactory() {//實(shí)例化保時(shí)捷工廠 this.__proto__ = new CarFactory(); this.productCar = function () { return "保時(shí)捷"; } } function TractorFactory() {//實(shí)例化拖拉機(jī)工廠并不重寫(xiě)接口測(cè)試接口定義 this.__proto__ = new CarFactory(); } var Porsche = new PorscheFactory(); Porsche.run(); var Tractor = new TractorFactory(); Tractor.run();總結(jié)
由于javascript沒(méi)有原生接口,所以需要自己想方法來(lái)實(shí)現(xiàn)接口這個(gè)原則。使用了接口以后就可以方便實(shí)現(xiàn)工廠模式。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79456.html
摘要:前言在這次的博客中我們將著重于的許多集成性功能來(lái)討論中的種種設(shè)計(jì)模式。裝飾器模式裝飾器模式是為了在原有功能上加入新功能,在中絕對(duì)屬于使用最頻繁架構(gòu)中最核心的模式,等都是通過(guò)裝飾器模式來(lái)完成擴(kuò)展的。 前言 在這次的博客中我們將著重于Junit的許多集成性功能來(lái)討論Junit中的種種設(shè)計(jì)模式??梢哉f(shuō)Junit的實(shí)現(xiàn)本身就是GOF設(shè)計(jì)原則的范例教本,下面就讓我們開(kāi)始吧。 裝飾器模式 裝飾器...
摘要:大潮來(lái)襲前端開(kāi)發(fā)能做些什么去年谷歌和火狐針對(duì)提出了的標(biāo)準(zhǔn),顧名思義,即的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的標(biāo)準(zhǔn)讓我們可以使用語(yǔ)言來(lái)開(kāi)發(fā)。 VR 大潮來(lái)襲 --- 前端開(kāi)發(fā)能做些什么 去年谷歌和火狐針對(duì) WebVR 提出了 WebVR API 的標(biāo)準(zhǔn),顧名思義,WebVR 即 web + VR 的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的 API 標(biāo)準(zhǔn)讓我們可以使用 ...
摘要:二用操作符構(gòu)造對(duì)象屬性名屬性值屬性名屬性值屬性名屬性值屬性名屬性值方法名方法名首先用創(chuàng)建一個(gè)空對(duì)象,然后用多條語(yǔ)句給對(duì)象添加屬性方法。他的寫(xiě)法與三用函數(shù)聲明的方式構(gòu)造對(duì)象比較像,但是稍有不同。 -- 新手向知識(shí),就不用ES6寫(xiě)法了。 一、字面量聲明 var obj = { 屬性名1 : 屬性值, 屬性名2 : 屬性值, 屬性名3 : 屬性...
摘要:簡(jiǎn)單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類(lèi)根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(lèi)。中的就是簡(jiǎn)單工廠模式的體現(xiàn),根據(jù)傳入一個(gè)唯一的標(biāo)識(shí)來(lái)獲得對(duì)象,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個(gè)要根據(jù)具體情況來(lái)定。中的就是典型的工廠方法模式。 showImg(https://segmentfault.com/img/bVbwbd9?w=640&h=492); 一. 簡(jiǎn)單工廠又叫做靜態(tài)工廠方法(...
摘要:一一個(gè)頁(yè)面上兩個(gè)左右鋪滿整個(gè)瀏覽器,要保證左邊的一直為,右邊的跟隨瀏覽器大小變化比如瀏覽器為,右邊為,瀏覽器為,右邊為,請(qǐng)寫(xiě)出大概的代碼。如果需要使用,最好是通過(guò)動(dòng)態(tài)給添加屬性值,這樣可以繞開(kāi)以上兩個(gè)問(wèn)題。 一、一個(gè)頁(yè)面上兩個(gè)div左右鋪滿整個(gè)瀏覽器,要保證左邊的div一直為100px,右邊的div跟隨瀏覽器大小變化(比如瀏覽器為500,右邊div為400,瀏覽器為900,右邊div為...
閱讀 2152·2023-04-25 22:58
閱讀 1487·2021-09-22 15:20
閱讀 2771·2019-08-30 15:56
閱讀 2116·2019-08-30 15:54
閱讀 2239·2019-08-29 12:31
閱讀 2842·2019-08-26 13:37
閱讀 672·2019-08-26 13:25
閱讀 2173·2019-08-26 11:58