国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式——工廠模式

Moxmi / 2505人閱讀

摘要:簡單工廠模式創建單一的對象示例描述工廠模式主要是為了創建對象實例或者類簇抽象工廠關心的是最終產出創建的對象而不關心創建的過程在出現多個類的時候每次創建需要找到對應的類往往比較麻煩這時候通常使用一個函數進行封裝來創建所需要的對象這樣就無需關注

簡單工廠模式(創建單一的對象) 示例1 描述

工廠模式主要是為了創建對象實例或者類簇(抽象工廠), 關心的是最終產出(創建)的對象, 而不關心創建的過程.

在出現多個類的時候, 每次創建需要找到對應的類往往比較麻煩, 這時候通常使用一個函數進行封裝來創建所需要的對象,
這樣就無需關注創建這些對象到底依賴哪些基類了, 只要知道有這個函數就可以了, 通常這個函數被稱為工廠函數,
這種模式叫簡單工廠模式

案例

假設一體育商品店賣器材, 里面有很多體育商品, 及其相關介紹. 當你來到體育用品店買一個籃球及相關介紹時,
你只需要問售貨員, 她會幫你找到你所需要的東西.

實現
// 籃球基類
var Basketball = function() {
    this.intro = "籃球盛行于美國";
}
Basketball.prototype = function() {
    getMember: function() {
        console.log("每個隊伍需要5名隊員");
    },
    getBallSize: function() {
        console.log("籃球很大");
    }
}

// 足球基類
var Football = function() {
    this.intro = "足球在世界范圍內盛行";
}
Football.prototype = function() {
    getMember: function() {
        console.log("每個隊伍需要11名隊員");
    },
    getBallSize: function() {
        console.log("足球很大");
    }
}

// 網球基類
var Tennis = function() {
    this.intro = "每年有很多網球系列賽";
}
Tennis.prototype = function() {
    getMember: function() {
        console.log("每個隊伍需要1名隊員");
    },
    getBallSize: function() {
        console.log("網球很小");
    }
}

// 運動工廠(這邊相當于咨詢體育器材店的售貨員, 告訴她你想要買什么體育用品)
var SportFactory = function(name) {
    switch(name) {
        case "basketball":
            return new Basketball();
        case "football":
            return new Football();
        case "tennis":
            return new Tennis();
    }
}

var ball = new SportFactory("tennis");
console.log(ball.intro)            // 每年有很多網球系列賽
console.log(ball.getMember());    // 每個隊伍需要1名隊員
示例2 描述

簡單工廠模式的理念就是創建對象, 而除此之外, 簡單工廠模式還可以創建相似對象. 在創建多個類的時候, 假設每個類都有很多相似的地方, 比如在多種彈出框上都有關閉按鈕, 都有提示文案等. 可以通過將這些相似的東西提取, 不相似針對性處理即可.

案例
假設當前項目需求是需要做各種彈出框: 警示框, 確認框及提示框.
實現
var LoginAlert = function(text) {
    this.content = text;
};
LoginAlert.prototype.show = function() {
    // 顯示警示框
};

var LoginConfirm = function(text) {
    this.content = text;
};
LoginConfirm.prototype.show = function() {
    // 顯示確認框
};

var LoginPrompt = function(text) {
    this.content = text;
};
LoginPrompt.prototype.show = function() {
    // 顯示提示框
};

function createPop(type, text) {
    var o = new Object();
    o.content = text;
    o.show = function() {
        // 顯示方法
    };
    if(type === "alert") {
        // 警示框差異部分
    }
    if(type === "confirm") {
        // 確認框差異部分
    }
    if(type === "prompt") {
        // 提示框差異部分
    }

    return o;
}

// 創建警示框
var userNameAlert = createPop("alert", "用戶名只能是26個字母和數字");
工廠方法模式(創建多類對象) 示例 描述
通過對產品類的抽象使其創建業務主要負責用于創建多類產品的實例.
案例
假設有一批關于計算機培訓的廣告資源需要投放, 一批是PHP要求黃色字體紅色背景, 一批JAVA綠色字體,
一批JAVASCRIPT粉色背景....
實現
var Java = function(content) {
    this.content = content;
    (functiont(content) {
        var div = document.createElement("div");
        div.innerHTML = content;
        div.style.color = "green";
        document.getElementById("container").appendChild(div);
    })(content);
};

var Php = function(content) {
    this.content = content;
    (functiont(content) {
        var div = document.createElement("div");
        div.innerHTML = content;
        div.style.color = "yellow";
        div.style.background = "red";
        document.getElementById("container").appendChild(div);
    })(content);
};

var Javascript = function(content) {
    this.content = content;
    (functiont(content) {
        var div = document.createElement("div");
        div.innerHTML = content;
        div.style.background = "pink";
        document.getElementById("container").appendChild(div);
    })(content);
};

// 創建學科類工廠
function JobFactory(type, content) {
    switch(type) {
        case "java":
            return new Java(content);
        case "php":
            return new Php(content);
        case "Javascript":
            return new Javascript(contet);
    }
}

// 又要添需求啦.....多加一批UI學科, 紅色邊框.....

// 代碼改進:

var Factory = function(type, content) {
    if(this instanceof Factory) {
        var s = new this[type] (content);
        return s;
    } else {
        return new Factory(type, content);
    }
};

// 在工廠原型中設置創建所有類型數據對象的基類
Factory.prototype = {
    Java: function() {
        // ...
    },
    Php: function() {
        // ...
    },
    Javascript: function() {
        // ...
    },
    UI: function() {
        // ...
    }
};

var data = [
    {type:"JavaScript", content:"javascript"},
    {type:"Java", content:"java"},
    {type:"PHP", content:"php"},
    {type:"UI", content:"ui"}
];

for(var i = data.length; i >= 0; i--) {
    Factory(data[i].type, data[i].content);
}
抽象工廠模式(創建類簇) 示例 描述

抽象工廠模式一般不用來創建具體對象, 抽象類中定義的方法只是顯性地定義一些功能, 但沒有具體的實現, 而一個對象需要具有一套完整的功能, 所以用抽象類創建的對象也是抽象的而非真實對象. 因此一般用它作為父類來創建子類.

抽象工廠其實是一個實現子類繼承父類的方法, 在這個方法中需要通過傳遞子類以及要繼承父類(抽象類)的名稱,并且在抽象工廠方法中又增加了一次對抽象存在性的一次判斷, 如果存在, 則將子類繼承父類的方法. 然后子類通過寄生式繼承.繼承父類的原型中需要注意一點是, 在對過渡類的原型繼承時, 不是繼承父類的原型, 而是通過new關鍵字復制父類的一個實例, 這么做事因為過渡類不應僅僅繼承父類的原型方法, 還要繼承父類的對象屬性, 所以要通過new關鍵字將父類的構造函數執行一遍來復制構造函數中的屬性和方法

抽象工廠添加抽象類比較特殊, 因為抽象工廠是個方法不需要實例化對象, 故只需要一份, 因此直接為抽象工廠添加類的屬性即可.

實現
// 抽象工廠方法
var VehicleFatory = function(subType, superType) {
    // 判斷抽象工廠中是否有該抽象類
    if(typeof VehicleFactory[superType] === "function") {
        // 緩存類
        function F() {};
        // 繼承父類屬性和方法
        F.prototype = new VehicleFactory[superType] ();
        // 將子類constructor 指向子類
        subType.constructor = subType;
        // 子類原型繼承"父類"
        subType.prototype = new F();
    } else {
        // 不存在該抽象類拋出錯誤
        throw new Error("未創建該抽象類");
    }
};

// 小汽車抽象類
VehicleFactory.Car = function() {
    this.type = "car";
};
VehicleFactory.Car.prototype = {
    getPrice: function() { return new Error("抽象方法不能調用"); },
    getSpeed: function() { return new Error("抽象方法不能調用"); }
};

// 公交車抽象類
VehicleFactory.Bus = function() {
    this.type = "bus";
};
VehicleFactory.Bus.prototype = {
    getPrice: function() { return new Error("抽象方法不能調用"); },
    getSpeed: function() { return new Error("抽象方法不能調用"); }
};

// 貨車抽象類
VehicleFactory.Truck = function() {
    this.type = "truck";
};
VehicleFactory.Truck.prototype = {
    getPrice: function() { return new Error("抽象方法不能調用"); },
    getSpeed: function() { return new Error("抽象方法不能調用"); }
};

// 創建產品子類繼承相應的產品簇抽象類
// 寶馬汽車子類
var BMW = function(price, speed) {
    this.price = price;
    this.speed = speed;
}
//抽象工廠實現對Car抽象類的繼承
VehicleFactory(BMW, "Car");
BMW.prototype.getPrice = function() { return this.price };
BMW.prototype.getSpeed = function() { return this.speed };

// 公交車...
// 貨車...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80135.html

相關文章

  • JavaScript工廠模式

    摘要:基于工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。工廠方法模式之所以又被稱為多態工廠模式,是因為所有的具體工廠類都具有同一抽象父類。工廠方法模式總結工廠方法模式是簡單工廠模式的進一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態工廠方法...

    oujie 評論0 收藏0
  • 工廠模式-設計模式

    摘要:不過怎么來說工廠方法模式是簡單工廠模式的升級版。其次,工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現的尤為明顯。 工廠模式想必大家在開發過程中會經常用到,顧名思義其就是作為一個工廠用來生產產品的,下面來簡單介紹幾種常見的工廠模式。 0x01 簡單工廠模式 1、類圖結構showImg(/img/bVFf1t?w=531&h=278); 2、角色分類 工廠類:其內部具有一點的判...

    HtmlCssJs 評論0 收藏0
  • 設計模式學習筆記:工廠模式

    摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調用它來實現其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創建所有產品(2)工廠方法模式:一個工廠方法創建一個產品(3)抽象工廠模式:一個工廠方法創建一類產品 2、創建型模式這種模式是指將實例的創建和使用分離開來,隱藏類實例的創建細節,外界...

    luxixing 評論0 收藏0
  • Java 設計模式 簡單工廠 工廠模式 抽象工廠

    摘要:簡單工廠,工廠模式和抽象工廠。不要認為簡單工廠是用就覺得一無是處,也不要覺得抽象工廠比較高大上就到處套。 工廠模式,實際上也會根據業務情景不同會有不同的實現方式。一般分為3種。簡單工廠,工廠模式和抽象工廠。顧名思義,這三種從簡單到抽象,名稱越來越高大上,實現方式肯定是越來越復雜 結論1:三種工廠的實現越來越復雜 簡單工廠 public class Factory { // 定義...

    CocoaChina 評論0 收藏0
  • 工廠模式理解了沒有?

    摘要:我認為按書上的順序比較好理解因為簡單靜態工廠模式是在工廠方法模式上縮減,抽象工廠模式是在工廠方法模式上再增強。所以我就先講工廠方法模式了。抽象工廠模式抽象工廠模式就比較復雜了,我們一般的應用都寫不到。 前言 只有光頭才能變強 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 昨天寫了單例模式了,今天是時候寫工廠模式啦~ 工廠模式我個人認為其實比...

    蘇丹 評論0 收藏0
  • 設計模式-工廠模式

    摘要:工廠方法模式工廠方法模式是為了克服簡單工廠模式的缺點。抽象工廠模式抽象工廠模式主要在于應對新系列的需求變化。此時架構便可以升級為工廠方法模式。 在面向對象編程中創建一個對象通常通過new關鍵字來創建,但是往往在一些業務場景下,個別對象是一個比較復雜的bean。此時創建對象不光是new了,還需要一些額外的操作,比如填充數據,附屬對象的準備等等。如果我們想要得到這樣的一個對象,直接簡單粗暴...

    ningwang 評論0 收藏0

發表評論

0條評論

Moxmi

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<