/*
? ? ? ? ? ? 工廠方法模式:通過對產(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é)科")