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

資訊專欄INFORMATION COLUMN

《JavaScript設計模式》閱讀筆記_part2

RobinTang / 871人閱讀

摘要:它屬于類創(chuàng)建型模式。基于繼承,將復雜的放置在函數(shù)中,簡單的共同的放置到一個構造函數(shù)中。代碼與繼承類似,但是核心就是將簡單的共有的放置到構造函數(shù)中,與類的思想類似。單例模式實現(xiàn)代碼庫,產(chǎn)生命名空間,一次只能實例化一個。

JavaScript設計模式閱讀
更多文章查看本專欄
設計模式第一篇:創(chuàng)建型設計模式 1、簡單工廠模式
簡單工廠模式:又叫靜態(tài)工廠方法,有一個工廠對象決定創(chuàng)建某一種產(chǎn)品對象類的實例。主要用于創(chuàng)建同一類對象。

根據(jù)現(xiàn)有的需求選擇不同的東西。

// 簡單的工廠模式
var redBall = function () {
    console.log("redBall")
};
var greenBall = function () {
    console.log("greenBall")
};
var blackBall = function () {
    console.log("blackBall")
};
var blueBall = function () {
    console.log("blueBall")
};

//工廠函數(shù)
var ballFactory = function (type) {
    switch (type) {
        case "red":
            return new redBall();
            break;
        case "green":
            return new greenBall();
            break;
        case "black":
            return new blackBall();
            break;
        case "blue":
            return new blueBall();
            break;

    }
}

通過一個工廠產(chǎn)生多個同類的,或者有相同屬性但是也存在差異的產(chǎn)品。

function createBook(name,time,type) {
    var t = new Object();
    t.name = name;
    t.time = time;
    t.type = type;
    return t;
}

function createBall(type,text) {
    var t = new Object();
    t.content = text;
    t.show = function () {
        // do something
    }
    switch (type) {
        case "red":
            // different Part
            break;
        case "green":
            // different Part
            break;
        case "black":
            // different Part
            break;
        case "blue":
            // different Part
            break;
    }
}

和類的區(qū)別:類是將初始的東西給你,然后你自己去對相應的需求進行添加實例方法。而工廠是根據(jù)你需要的方法直接生成好給你。好處,如果有大量相同的含有特殊功能的實例存在,可以通過簡單工廠增加復用性。

核心:根據(jù)情況的不同選擇不同的情況進行處理,像是一個封裝型的"if else"。

2、工廠方法模式
工廠方法模式:又稱為工廠模式,也叫虛擬構造器模式或者多態(tài)工廠模式。

它屬于類創(chuàng)建型模式。通過對產(chǎn)品類的抽象使其創(chuàng)建業(yè)務,只要負責用于創(chuàng)建多類的實例。
將實際創(chuàng)建對象的工作推遲到了子類當中。

//  類的安全模式
var Factory = function (type, content) {
    if(this instanceof  Factory){
        return new this[type](content);
    }else{
        return new Factory(type, content);
    }
};
//  創(chuàng)建不同類型基類的實現(xiàn)
Factory.prototype={
    Java:function (content) {
        this.content = content;
    },
    PHP:function (content) {
        this.content = content;
    },
    Python:function (content) {
        this.content = content;
    },
    JavaScript:function (content) {
        this.content = content;
    },
}
3、抽象工廠模式
通過對類的工廠抽象使其業(yè)務用于對產(chǎn)品類簇的創(chuàng)建,而不負責創(chuàng)建某一類產(chǎn)品的實例。

用于產(chǎn)生類簇。

創(chuàng)建一個類,類里面擁有許多抽象的類,抽象的類定義了同類的類的結構。在使用的時候?qū)⒊橄蟮念愡M行繼承。

/**
 * 實現(xiàn)subType類對工廠類中的superType類型的抽象類的繼承
 * @param subType 要繼承的類
 * @param superType 工廠類中的抽象類type
 */
const VehicleFactory = function(subType, superType) {
    if (typeof VehicleFactory[superType] === "function") {
        function F() {
            this.type = "車輛"
        }
        F.prototype = new VehicleFactory[superType]()
        subType.constructor = subType
        subType.prototype = new F()                // 因為子類subType不僅需要繼承superType對應的類的原型方法,還要繼承其對象屬性
    } else throw new Error("不存在該抽象類")
}

VehicleFactory.Car = function() {
    this.type = "car"
}
VehicleFactory.Car.prototype = {
    getPrice: function() {
        return new Error("抽象方法不可使用")
    },
    getSpeed: function() {
        return new Error("抽象方法不可使用")
    }
}

const BMW = function(price, speed) {
    this.price = price
    this.speed = speed
}
VehicleFactory(BMW, "Car")        // 繼承Car抽象類
BMW.prototype.getPrice = function() {        // 覆寫getPrice方法
    console.log(`BWM price is ${this.price}`)
}
BMW.prototype.getSpeed = function() {
    console.log(`BWM speed is ${this.speed}`)
}

const baomai5 = new BMW(30, 99)
// baomai5.getPrice()                          // BWM price is 30
// baomai5 instanceof VehicleFactory.Car       // true
4、建造者模式
將一個復雜對象的構建層與其表示層相互分離,同樣的構造過程可采用不同的表示。

關注產(chǎn)生過程,將對象的創(chuàng)建分為模塊化創(chuàng)建,自定義度變高。

建造一個電腦:

//  構建基本主體
const basicComputer = function () {

}
basicComputer.prototype = {
    //  自定義的一些原型方法
}
//  構建CPU模塊
const cpu = function (type) {
    this.type = type;
}
cpu.prototype = {
    //  自定義的一些原型方法
}
//  構建顯卡模塊
const graphicsCard  = function (type) {
    this.type = type;
}
graphicsCard.prototype = {
    //  自定義的一些原型方法
}
//  構建屏幕模塊
const screen = function (type) {
    this.type = type;
}
screen.prototype = {
    //  自定義的一些原型方法
}

const computer = function () {
    const t = new basicComputer();
    t.cpu = new cpu();
    t.graphicsCard = new graphicsCard();
    t.screen = new screen();
    return t;
}
5、原型模式
用原型實例指向創(chuàng)建對象的類,使用與創(chuàng)建新的對象的類共享原型對象的類型以及方法。

基于繼承,將復雜的放置在函數(shù)中,簡單的共同的放置到一個構造函數(shù)中。

在使用的時候可以對原型進行拓展。

代碼與繼承類似,但是核心就是將簡單的共有的放置到構造函數(shù)中,與類的思想類似。

6、單例模式
只允許實例化一次的類。在使用的時候可以用于創(chuàng)建代碼庫,創(chuàng)建命名空間。

單例模式實現(xiàn)代碼庫,產(chǎn)生命名空間,一次只能實例化一個。

//  一個命名空間
const A = {
    fun_1: {
        fun_1_1:function () {
            //  do something
        },
    },
    fun_2: {
        //  do something

    },
    fun_3:function () {
        //  do something

    }
}
//  空間類可為一個代碼塊,也可以為更多一層次的代碼庫(命名空間)

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101109.html

相關文章

  • [譯]如何使用Flask開發(fā)一個增刪改查的應用(part2)

    摘要:獲取成為開發(fā)專家的技巧。我們可以在兩個文本框輸入筆記的標題和內(nèi)容。在本教程中,我們將使用一個名為的工具。它是一個火狐瀏覽器的擴展,我們可以使用它管理數(shù)據(jù)庫。安裝,打開火狐瀏覽器,點擊,然后點找到的文件夾圖標并點擊它。 showImg(https://cdn-images-1.medium.com/max/600/1*Ou6FFJJD3zhcIUU8wBZqIw.png); 教程譯文首發(fā)...

    adam1q84 評論0 收藏0
  • JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part2

    摘要:設計模式與開發(fā)實踐讀書筆記。看此文章前,建議先看設計模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時,也實現(xiàn)了發(fā)布訂閱模式。 《JavaScript設計模式與開發(fā)實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時,也實現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...

    Charlie_Jade 評論0 收藏0
  • JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part2

    摘要:設計模式與開發(fā)實踐讀書筆記。看此文章前,建議先看設計模式之發(fā)布訂閱模式觀察者模式在中,已經(jīng)介紹了什么是發(fā)布訂閱模式,同時,也實現(xiàn)了發(fā)布訂閱模式。 《JavaScript設計模式與開發(fā)實踐》讀書筆記。 看此文章前,建議先看JavaScript設計模式之發(fā)布-訂閱模式(觀察者模式)-Part1 在Part1中,已經(jīng)介紹了什么是發(fā)布-訂閱模式,同時,也實現(xiàn)了發(fā)布-訂閱模式。但是,就Part1...

    chemzqm 評論0 收藏0
  • Part 2: Containers

    摘要:在默認情況下使用的公共注冊表。注意我們將在這里使用的公共注冊表,因為它是免費和預配置的,但是有許多公共注冊中心可供選擇,而且您甚至可以使用可信注冊表建立您自己的私有注冊表。標記鏡像將本地映像與注冊表中的存儲庫關聯(lián)的符號是。 要求 安裝了1.13或者更高版本的Docker 閱讀了Part1中的定位(我沒寫) 介紹 是時候用Docker構建一個app了。我們會從構建這樣一個app的最底...

    Soarkey 評論0 收藏0

發(fā)表評論

0條評論

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