設(shè)計模式---- 工廠方法模式

/*

? ? ? ? ? ? 工廠方法模式:通過對產(chǎn)品類的抽象使其創(chuàng)建業(yè)務(wù)主要負(fù)責(zé)用于創(chuàng)建多類產(chǎn)品的實例

? ? ? ? */

? ? ? ? /*

? ? ? ? ? ? 安全工廠方法就是在構(gòu)造函數(shù)中進(jìn)行判斷,當(dāng)構(gòu)造函數(shù)被引用時判斷構(gòu)造函數(shù)的this的實例是否是這個構(gòu)造函數(shù),

? ? ? ? ? ? 如果不是那么就將實例化好的函數(shù)return 出去;

? ? ? ? 我們知道在js中可以自定義對象,

? ? ? ? 我們可以通過instanceof這個方法定義來監(jiān)測,這個實例是哪一個對象的;

? ? ? ? 函數(shù)數(shù)組都可以稱之為對象

? ? ? ? */

? ? ? ? var Demo = function (text) {

? ? ? ? ? ? if (!(this instanceof Demo)) {

? ? ? ? ? ? ? ? return new Demo(text)

? ? ? ? ? ? }

? ? ? ? ? ? this.text = text;

? ? ? ? }

? ? ? ? Demo.prototype.show = function () {

? ? ? ? ? ? console.log(this.text)

? ? ? ? }

? ? ? ? var d = Demo("愛上了快遞費即可")

? ? ? ? d.show()

? ? ? ? /*? 例子:*/

? ? ? ? //需求廣告資源投放,關(guān)于計算機(jī)培訓(xùn)的,一批java,用綠色字體,還有一批php,用黃色字體紅色背景

? ? ? ? //創(chuàng)建Java類

? ? ? ? var Java = function (text) {

? ? ? ? ? ? this.text = text;

? ? ? ? ? ? (function (text) {

? ? ? ? ? ? ? ? var div = document.createElement("div")

? ? ? ? ? ? ? ? div.innerHTML = text;

? ? ? ? ? ? ? ? div.style.color = "yellow";

? ? ? ? ? ? ? ? document.getElementById("java").appendChild(div)

? ? ? ? ? ? })(this.text)

? ? ? ? }

? ? ? ? //創(chuàng)建Php類

? ? ? ? var Php = function (text) {

? ? ? ? ? ? this.text = text;

? ? ? ? ? ? (function (text) {

? ? ? ? ? ? ? ? var div = document.createElement("div");

? ? ? ? ? ? ? ? div.innerHTML = text;

? ? ? ? ? ? ? ? div.style.color = "red";

? ? ? ? ? ? ? ? document.getElementById("php").appendChild(div)

? ? ? ? ? ? })(this.text)

? ? ? ? }

? ? ? ? //簡單工廠方法,每次修改需要修改倆次,一個是構(gòu)造函數(shù),一個是工廠函數(shù)

? ? ? ? /* var Factory=function(type,text){

? ? ? ? ? ? switch(type){

? ? ? ? ? ? ? ? case 'java':

? ? ? ? ? ? ? ? return new Java(text);

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case 'php':

? ? ? ? ? ? ? ? return new Php(text);

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Factory("php","java學(xué)科"); */

? ? ? ? //工廠方法模式本意是說將實際創(chuàng)建對象的工作推遲到子類當(dāng)中

? ? ? ? //簡單的工廠方法是將類放在一個構(gòu)造函數(shù)中,然后在工廠函數(shù)內(nèi)部通過判斷,將類return回去,

? ? ? ? //工廠方法是將構(gòu)造函數(shù)寫在工廠函數(shù)的原型上,

? ? ? ? var Factory = function (type, text) {

? ? ? ? ? ? // console.log(type,text)

? ? ? ? ? ? // return false;

? ? ? ? ? ? //判斷當(dāng)前這個方法的this是否指向了當(dāng)前方法的實例

? ? ? ? ? ? if (this instanceof Factory) {

? ? ? ? ? ? ? ? console.log(this)

? ? ? ? ? ? ? ? var s = new this[type](text);

? ? ? ? ? ? ? ? return s;

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? return new Factory(type, text)

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Factory.prototype = {

? ? ? ? ? ? java: function (text) {

? ? ? ? ? ? ? ? (function (text) {

? ? ? ? ? ? ? ? ? ? var div = document.createElement("div")

? ? ? ? ? ? ? ? ? ? div.innerHTML = text;

? ? ? ? ? ? ? ? ? ? div.style.color = "yellow";

? ? ? ? ? ? ? ? ? ? document.getElementById("java").appendChild(div)

? ? ? ? ? ? ? ? })(text)

? ? ? ? ? ? },

? ? ? ? ? ? php: function (text) {

? ? ? ? ? ? ? ? (function (text) {

? ? ? ? ? ? ? ? ? ? var div = document.createElement("div");

? ? ? ? ? ? ? ? ? ? div.innerHTML = text;

? ? ? ? ? ? ? ? ? ? div.style.color = "red";

? ? ? ? ? ? ? ? ? ? document.getElementById("php").appendChild(div)

? ? ? ? ? ? ? ? })(text)

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? Factory("php", "php學(xué)科")

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容