摘要:它屬于類創(chuàng)建型模式。基于繼承,將復雜的放置在函數(shù)中,簡單的共同的放置到一個構造函數(shù)中。代碼與繼承類似,但是核心就是將簡單的共有的放置到構造函數(shù)中,與類的思想類似。單例模式實現(xiàn)代碼庫,產(chǎn)生命名空間,一次只能實例化一個。
JavaScript設計模式閱讀
更多文章查看本專欄設計模式第一篇:創(chuàng)建型設計模式 1、簡單工廠模式
簡單工廠模式:又叫靜態(tài)工廠方法,有一個工廠對象決定創(chuàng)建某一種產(chǎn)品對象類的實例。主要用于創(chuàng)建同一類對象。
根據(jù)現(xiàn)有的需求選擇不同的東西。
// 簡單的工廠模式 var redBall = function () { console.log("redBall") }; var greenBall = function () { console.log("greenBall") }; var blackBall = function () { console.log("blackBall") }; var blueBall = function () { console.log("blueBall") }; //工廠函數(shù) var ballFactory = function (type) { switch (type) { case "red": return new redBall(); break; case "green": return new greenBall(); break; case "black": return new blackBall(); break; case "blue": return new blueBall(); break; } }
通過一個工廠產(chǎn)生多個同類的,或者有相同屬性但是也存在差異的產(chǎn)品。
function createBook(name,time,type) { var t = new Object(); t.name = name; t.time = time; t.type = type; return t; } function createBall(type,text) { var t = new Object(); t.content = text; t.show = function () { // do something } switch (type) { case "red": // different Part break; case "green": // different Part break; case "black": // different Part break; case "blue": // different Part break; } }
和類的區(qū)別:類是將初始的東西給你,然后你自己去對相應的需求進行添加實例方法。而工廠是根據(jù)你需要的方法直接生成好給你。好處,如果有大量相同的含有特殊功能的實例存在,可以通過簡單工廠增加復用性。
核心:根據(jù)情況的不同選擇不同的情況進行處理,像是一個封裝型的"if else"。
2、工廠方法模式工廠方法模式:又稱為工廠模式,也叫虛擬構造器模式或者多態(tài)工廠模式。
它屬于類創(chuàng)建型模式。通過對產(chǎn)品類的抽象使其創(chuàng)建業(yè)務,只要負責用于創(chuàng)建多類的實例。
將實際創(chuàng)建對象的工作推遲到了子類當中。
// 類的安全模式 var Factory = function (type, content) { if(this instanceof Factory){ return new this[type](content); }else{ return new Factory(type, content); } }; // 創(chuàng)建不同類型基類的實現(xiàn) Factory.prototype={ Java:function (content) { this.content = content; }, PHP:function (content) { this.content = content; }, Python:function (content) { this.content = content; }, JavaScript:function (content) { this.content = content; }, }3、抽象工廠模式
通過對類的工廠抽象使其業(yè)務用于對產(chǎn)品類簇的創(chuàng)建,而不負責創(chuàng)建某一類產(chǎn)品的實例。
用于產(chǎn)生類簇。
創(chuàng)建一個類,類里面擁有許多抽象的類,抽象的類定義了同類的類的結構。在使用的時候?qū)⒊橄蟮念愡M行繼承。
/** * 實現(xiàn)subType類對工廠類中的superType類型的抽象類的繼承 * @param subType 要繼承的類 * @param superType 工廠類中的抽象類type */ const VehicleFactory = function(subType, superType) { if (typeof VehicleFactory[superType] === "function") { function F() { this.type = "車輛" } F.prototype = new VehicleFactory[superType]() subType.constructor = subType subType.prototype = new F() // 因為子類subType不僅需要繼承superType對應的類的原型方法,還要繼承其對象屬性 } else throw new Error("不存在該抽象類") } VehicleFactory.Car = function() { this.type = "car" } VehicleFactory.Car.prototype = { getPrice: function() { return new Error("抽象方法不可使用") }, getSpeed: function() { return new Error("抽象方法不可使用") } } const BMW = function(price, speed) { this.price = price this.speed = speed } VehicleFactory(BMW, "Car") // 繼承Car抽象類 BMW.prototype.getPrice = function() { // 覆寫getPrice方法 console.log(`BWM price is ${this.price}`) } BMW.prototype.getSpeed = function() { console.log(`BWM speed is ${this.speed}`) } const baomai5 = new BMW(30, 99) // baomai5.getPrice() // BWM price is 30 // baomai5 instanceof VehicleFactory.Car // true4、建造者模式
將一個復雜對象的構建層與其表示層相互分離,同樣的構造過程可采用不同的表示。
關注產(chǎn)生過程,將對象的創(chuàng)建分為模塊化創(chuàng)建,自定義度變高。
建造一個電腦:
// 構建基本主體 const basicComputer = function () { } basicComputer.prototype = { // 自定義的一些原型方法 } // 構建CPU模塊 const cpu = function (type) { this.type = type; } cpu.prototype = { // 自定義的一些原型方法 } // 構建顯卡模塊 const graphicsCard = function (type) { this.type = type; } graphicsCard.prototype = { // 自定義的一些原型方法 } // 構建屏幕模塊 const screen = function (type) { this.type = type; } screen.prototype = { // 自定義的一些原型方法 } const computer = function () { const t = new basicComputer(); t.cpu = new cpu(); t.graphicsCard = new graphicsCard(); t.screen = new screen(); return t; }5、原型模式
用原型實例指向創(chuàng)建對象的類,使用與創(chuàng)建新的對象的類共享原型對象的類型以及方法。
基于繼承,將復雜的放置在函數(shù)中,簡單的共同的放置到一個構造函數(shù)中。
在使用的時候可以對原型進行拓展。
代碼與繼承類似,但是核心就是將簡單的共有的放置到構造函數(shù)中,與類的思想類似。
6、單例模式只允許實例化一次的類。在使用的時候可以用于創(chuàng)建代碼庫,創(chuàng)建命名空間。
單例模式實現(xiàn)代碼庫,產(chǎn)生命名空間,一次只能實例化一個。
// 一個命名空間 const A = { fun_1: { fun_1_1:function () { // do something }, }, fun_2: { // do something }, fun_3:function () { // do something } } // 空間類可為一個代碼塊,也可以為更多一層次的代碼庫(命名空間)
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101109.html
摘要:獲取成為開發(fā)專家的技巧。我們可以在兩個文本框輸入筆記的標題和內(nèi)容。在本教程中,我們將使用一個名為的工具。它是一個火狐瀏覽器的擴展,我們可以使用它管理數(shù)據(jù)庫。安裝,打開火狐瀏覽器,點擊,然后點找到的文件夾圖標并點擊它。 showImg(https://cdn-images-1.medium.com/max/600/1*Ou6FFJJD3zhcIUU8wBZqIw.png); 教程譯文首發(fā)...
摘要:設計模式與開發(fā)實踐讀書筆記。看此文章前,建議先看設計模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時,也實現(xiàn)了發(fā)布訂閱模式。 《JavaScript設計模式與開發(fā)實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時,也實現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...
摘要:設計模式與開發(fā)實踐讀書筆記。看此文章前,建議先看設計模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時,也實現(xiàn)了發(fā)布訂閱模式。 《JavaScript設計模式與開發(fā)實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時,也實現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...
摘要:在默認情況下使用的公共注冊表。注意我們將在這里使用的公共注冊表,因為它是免費和預配置的,但是有許多公共注冊中心可供選擇,而且您甚至可以使用可信注冊表建立您自己的私有注冊表。標記鏡像將本地映像與注冊表中的存儲庫關聯(lián)的符號是。 要求 安裝了1.13或者更高版本的Docker 閱讀了Part1中的定位(我沒寫) 介紹 是時候用Docker構建一個app了。我們會從構建這樣一個app的最底...
閱讀 3187·2021-11-23 09:51
閱讀 1524·2021-11-22 09:34
閱讀 2836·2021-10-27 14:15
閱讀 2266·2021-10-12 10:17
閱讀 1884·2021-10-12 10:12
閱讀 946·2021-09-27 14:00
閱讀 1996·2021-09-22 15:19
閱讀 1032·2019-08-30 10:51