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