搜尋
首頁web前端js教程javascript設計模式之工廠模式範例講解_基礎知識

javaScript工廠方式原始的方式

因為物件的屬性可以在物件建立後動態定義,這在 JavaScript 最初引入時都會編寫類似下面的程式碼

複製代碼 代碼如下:

var oCar = new Object;
oCar.color = "blue";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
  alert(this.color);
};

在上面的程式碼中,建立物件 car。然後給它設置幾個屬性:它的顏色是藍色,有四個門,每加侖油可以跑 25 英里。最後一個屬性其實是指向函數的指針,這意味著該屬性是個方法。執行這段程式碼後,就可以使用物件 car。不過這裡有一個問題,就是可能需要創建多個 car 的實例,這顯然不是很好的方式。

解決方案:工廠方法
要解決該問題,開發者創造了能創建並返回特定類型的物件的工廠函數。例如,函數 createCar() 可用於封裝前面列出的建立 car 物件的操作:

複製程式碼 程式碼如下:

function createCar(sColororiDoors(sColororg) >  var oTempCar = new Object;
  oTempCar.color = sColor;
  oTempCar.doors = iDoors;
  oTempCar.mpg = iMpg;
  oTempTemp.Car.showor = func( this.color);
  };
  return oTempCar;
}

var oCar1 = createCar("red",4,23);var oCar2 = createCar("blue",3,25);


oCar1.showColor();        //輸出 "red"

oCar2.showColor();        //輸出 "blue"



呼叫此工廠函數,將建立新對象,並賦予它所有必要的屬性,為 createCar() 函數加上參數,即可為要建立的 car 物件的 color、doors 和 mpg 屬性賦值。這使得兩個物件具有相同的屬性,卻有不同的屬性值。這個方法有個不好的地方在於每建立一個car物件(即呼叫一次createCar函數)都會重複的為每個物件建立showColor 方法,而此時沒有必要的而事實上,每個物件都共用同一個函數。於是我們嘗試在函數之外去宣告其方法屬性。

在工廠函數外定義物件的方法
有些開發者在工廠函數外定義物件的方法,然後透過屬性指向該方法,從而避免這個問題:

複製程式碼 程式碼如下:
function showColor() {


function showColor() { color);

}

function createCar(sColor,iDoors,iMpg) {
  var oTempCar = new Object;
  oTempCar.color = sColor;
  oTempCar.doors = iTempCar.color = sColor;
  oTempCar.doors = iDoors;
  oTempCar.showColor = showColor;

  return oTempCar;

}

var oCar1 = createCar("red",4,23);

var oCar2 = createCar("blue",3,25);

oCar1.showColor();        //輸出 "red"

oCar2.showColor();        //輸出 "blue"

在上面這段重寫的程式碼中,在函數 createCar() 之前定義了函數 showColor()。在 createCar() 內部,賦予物件一個指向已經存在的 showColor() 函數的指標。從功能上講,這樣解決了重複創建函數物件的問題;但是從語義上講,該函數不太像是物件的方法。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
java框架中工厂模式的应用场景有哪些?java框架中工厂模式的应用场景有哪些?Jun 01, 2024 pm 04:06 PM

工厂模式用于解耦对象的创建过程,将其封装在工厂类中,使之与具体类解耦。在Java框架中,工厂模式应用于:创建复杂对象(如Spring中的beans)提供对象隔离,增强可测试性和可维护性支持扩展,通过添加新工厂类增加对新对象类型的支持

java工厂模式有哪些好处java工厂模式有哪些好处Dec 25, 2023 pm 05:40 PM

java工厂模式的好处:1、降低系统的耦合度;2、提高代码的复用性;3、隐藏对象的创建过程;4、简化对象的创建过程;5、支持依赖注入;6、提供更好的性能;7、增强可测试性;8、支持国际化;9、促进开放封闭原则;10、提供更好的扩展性。详细介绍:1、降低系统的耦合度,工厂模式通过将对象的创建过程集中到一个工厂类中,降低了系统的耦合度;2、提高代码的复用性等等。

如何在Golang中应用工厂模式如何在Golang中应用工厂模式Apr 04, 2024 am 11:33 AM

工厂模式在Go中,工厂模式允许创建对象,无需指定具体类:定义一个表示对象的接口(例如Shape)。创建实现该接口的具体类型(例如Circle和Rectangle)。创建工厂类,根据给定的类型创建对象(例如ShapeFactory)。在客户端代码中使用工厂类创建对象。这种设计模式增强了代码的灵活性,无需直接耦合到具体类型。

深入解析Java工厂模式:区分和应用简单工厂、工厂方法和抽象工厂的不同深入解析Java工厂模式:区分和应用简单工厂、工厂方法和抽象工厂的不同Dec 28, 2023 pm 03:09 PM

Java工厂模式详解:理解简单工厂、工厂方法和抽象工厂的区别与应用场景引言在软件开发过程中,面对复杂的对象创建和初始化过程,我们往往需要使用工厂模式来解决这一问题。Java作为一种常用的面向对象编程语言,提供了多种工厂模式的实现方式。本文将详细介绍Java工厂模式的三种常见实现方式:简单工厂、工厂方法和抽象工厂,并且对它们的区别以及应用场景进行深入分析。一、

C++ 函数重载和重写中单例模式与工厂模式的运用C++ 函数重载和重写中单例模式与工厂模式的运用Apr 19, 2024 pm 05:06 PM

单例模式:通过函数重载提供不同参数的单例实例。工厂模式:通过函数重写创建不同类型的对象,实现创建过程与具体产品类的解耦。

理解PHP面向对象编程中的工厂模式理解PHP面向对象编程中的工厂模式Aug 10, 2023 am 10:37 AM

理解PHP面向对象编程中的工厂模式工厂模式是一种常用的设计模式,它用于创建对象的过程中将对象的创建和使用解耦。在PHP面向对象编程中,工厂模式可以帮助我们更好地管理对象的创建和生命周期。本文将通过代码示例来详细介绍PHP中的工厂模式。在PHP中,我们可以通过使用工厂模式来实现对象的创建和初始化过程,而不是直接使用new关键字。这样做的好处是,如果将来需要改变

Java工厂模式详解:简单工厂、工厂方法和抽象工厂Java工厂模式详解:简单工厂、工厂方法和抽象工厂Dec 28, 2023 am 10:23 AM

Java工厂模式详解:简单工厂、工厂方法和抽象工厂工厂模式是一种常用的设计模式,它用于根据不同的需求动态创建对象,将对象的创建与使用分离,提高代码的可复用性和可扩展性。在Java中,工厂模式主要有三种形式:简单工厂、工厂方法和抽象工厂。一、简单工厂模式简单工厂模式是最基本的工厂模式,也是最简单的一种形式。它通过一个工厂类来创建对象,根据不同的参数来决定创建哪

深入探讨Java工厂模式的实现与应用深入探讨Java工厂模式的实现与应用Feb 24, 2024 pm 10:15 PM

Java工厂模式的原理与应用详解工厂模式是一种常用的设计模式,它用于创建对象,以及将对象的创建过程封装起来。Java中的工厂模式有多种实现方式,其中最常见的有简单工厂模式、工厂方法模式和抽象工厂模式。本文将详细介绍这三种工厂模式的原理和应用,并给出相应的代码示例。一、简单工厂模式简单工厂模式是最简单、最常用的工厂模式。它通过一个工厂类,根据传入的参数来返回不

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能