欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 中常見設(shè)計(jì)模式整理

在JavaScript的開發(fā)過程中,設(shè)計(jì)模式是程序員們必須了解的重要概念之一。設(shè)計(jì)模式是開發(fā)者在特定場景下遇到的通用問題的解決方法的總結(jié)。通過使用設(shè)計(jì)模式,我們可以避免重復(fù)造輪子的情況,同時(shí)也可以提高代碼的可維護(hù)性、可讀性和可擴(kuò)展性。在這篇文章中,我們將整理一些常見的JavaScript設(shè)計(jì)模式,并通過舉例來詳細(xì)說明各自的功能和應(yīng)用場景。 1. 單例模式 單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它保證類只有一個(gè)實(shí)例,并提供了一個(gè)全局訪問點(diǎn)。在JavaScript中,一個(gè)典型的單例模式實(shí)現(xiàn)如下: ``` var Singleton = (function () { var instance; function createInstance() { var object = new Object("I am the instance"); return object; } return { getInstance: function () { if (!instance) { instance = createInstance(); } return instance; } }; })(); ``` 在上述代碼中,創(chuàng)建了一個(gè)名為Singleton的立即執(zhí)行函數(shù),并在其中定義了一個(gè)內(nèi)部變量`instance`。函數(shù)`createInstance()`用來創(chuàng)建對(duì)象實(shí)例。在立即執(zhí)行函數(shù)中返回一個(gè)對(duì)象,這個(gè)對(duì)象包含一個(gè)公共方法`getInstance()`,用來獲取或創(chuàng)建實(shí)例。當(dāng)`getInstance()`這個(gè)方法第一次被調(diào)用時(shí),會(huì)檢查實(shí)例是否已經(jīng)存在并返回該實(shí)例,否則會(huì)創(chuàng)建一個(gè)新的實(shí)例并返回。 2. 觀察者模式 觀察者模式是一種行為設(shè)計(jì)模式,它允許對(duì)象在發(fā)生變化時(shí)通知其他對(duì)象。在觀察者模式中,我們定義一種發(fā)布者和訂閱者的關(guān)系。當(dāng)發(fā)布者狀態(tài)改變時(shí),所有訂閱者都會(huì)接收到相應(yīng)的更改通知。以下是一個(gè)簡單的觀察者模式實(shí)現(xiàn): ``` function ObserverList() { this.observerList = []; } ObserverList.prototype.add = function (obj) { return this.observerList.push(obj); }; ObserverList.prototype.get = function (index) { if (index >-1 && index< this.observerList.length) { return this.observerList[index]; } }; ObserverList.prototype.count = function () { return this.observerList.length; }; ObserverList.prototype.removeAt = function (index) { this.observerList.splice(index, 1); }; function Subject() { this.observers = new ObserverList(); } Subject.prototype.addObserver = function (observer) { this.observers.add(observer); }; Subject.prototype.removeObserver = function (observer) { this.observers.removeAt(this.observers.indexOf(observer, 0)); }; Subject.prototype.notify = function (context) { var observerCount = this.observers.count(); for (var i = 0; i< observerCount; i++) { this.observers.get(i).update(context); } }; function Observer() { this.update = function () { // ... }; } ``` 在上述代碼中,先創(chuàng)建了一個(gè)名為ObserverList的類,它包含了一個(gè)observerList數(shù)組和一些基本的數(shù)組操作函數(shù)。然后,定義了一個(gè)名為Subject的類,它有一個(gè)observers數(shù)組用于存儲(chǔ)觀察者列表。Subject還包含了一些基本的觀察者操作函數(shù),如添加、移除和通知觀察者。最后,定義了一個(gè)名為Observer的類,它包含一個(gè)update函數(shù),在該函數(shù)中可以進(jìn)行狀態(tài)更新。 3. 工廠模式 工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供一種方式來創(chuàng)建對(duì)象,而無需指定要?jiǎng)?chuàng)建的對(duì)象的具體類型。工廠模式讓開發(fā)者能夠?qū)?duì)象實(shí)例化的過程從客戶端代碼中分離出來,使其保持獨(dú)立。以下是一個(gè)簡單的工廠模式實(shí)現(xiàn): ``` function Car(options) { this.doors = options.doors || 4; this.state = options.state || "brand new"; this.color = options.color || "silver"; } function Truck(options) { this.state = options.state || "used"; this.wheelSize = options.wheelSize || "large"; this.color = options.color || "blue"; } function VehicleFactory() {} VehicleFactory.prototype.vehicleClass = Car; VehicleFactory.prototype.createVehicle = function (options) { if (options.vehicleType === "car") { this.vehicleClass = Car; } else { this.vehicleClass = Truck; } return new this.vehicleClass(options); }; var carFactory = new VehicleFactory(); var car = carFactory.createVehicle({ vehicleType: "car", color: "yellow", doors: 6 }); var truckFactory = new VehicleFactory(); var truck = truckFactory.createVehicle({ vehicleType: "truck", state: "like new", color: "red", wheelSize: "small" }); ``` 在上述代碼中,定義了兩個(gè)類Car和Truck,然后定義了一個(gè)名為VehicleFactory的工廠類。VehicleFactory類包含prototype屬性,這個(gè)屬性包含了繼承自基類的所有方法和屬性。在VehicleFactory中,我們定義了一個(gè)vehicleClass變量,它標(biāo)識(shí)要?jiǎng)?chuàng)建哪種類型的車輛。createVehicle()方法接受一個(gè)選項(xiàng)對(duì)象,然后按照選項(xiàng)對(duì)象中的車輛類型來創(chuàng)建相應(yīng)的車輛對(duì)象。最后,我們創(chuàng)建兩個(gè)工廠實(shí)例分別用來創(chuàng)建車輛對(duì)象。 總結(jié) 以上三種設(shè)計(jì)模式只是JavaScript中的冰山一角,設(shè)計(jì)模式是代碼復(fù)用和優(yōu)化的主要手段之一。如何運(yùn)用好這些設(shè)計(jì)模式,對(duì)于移動(dòng)端開發(fā)者是一個(gè)重要的技能層面,只有掌握設(shè)計(jì)模式的技術(shù),才能更好地提升代碼的可重用性,并減少開發(fā)成本。