亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS 設(shè)計(jì)模式 八(建造者模式)

tanglijun / 3613人閱讀

摘要:即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。指導(dǎo)類負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類建造者模式優(yōu)點(diǎn)建造者模式的封裝性很好。

建造者模式

將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時(shí)候面臨著"一個(gè)復(fù)雜對(duì)象"的創(chuàng)建工作,由于需求的變化,這個(gè)復(fù)雜對(duì)象的某些部分經(jīng)常面臨著劇烈的變化,一些基本部件不會(huì)變。所以需要將變與不變分離。與抽象工廠的區(qū)別:在建造者模式里,有個(gè)指導(dǎo)者(Director),由指導(dǎo)者來管理建造者,用戶是與指導(dǎo)者聯(lián)系的,指導(dǎo)者聯(lián)系建造者最后得到產(chǎn)品。即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。

建造者模式四要素

1.產(chǎn)品類Product:一般是一個(gè)較為復(fù)雜的對(duì)象,也就是說創(chuàng)建對(duì)象的過程比較復(fù)雜,一般會(huì)有比較多的代碼量。
2.抽象建造者類Builder: 將建造的具體過程交與它的子類來實(shí)現(xiàn),這樣更容易擴(kuò)展。
3.建造者類ConcreteBuilder: 組建產(chǎn)品;返回組建好的產(chǎn)品。
4.指導(dǎo)類Director: 負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類

建造者模式優(yōu)點(diǎn)

1.建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在指導(dǎo)者類中對(duì)整體而言可以取得比較好的穩(wěn)定性。
2.建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成。

舉例

似乎很抽象。舉個(gè)例子:前面你創(chuàng)建了一個(gè)生產(chǎn)保時(shí)捷的工廠,生產(chǎn)一臺(tái)保時(shí)捷911需要的主要部件都一樣(引擎,輪子,方向盤...)和流程是不變的,變的是引擎,輪子,控制系統(tǒng)等等部件具體實(shí)現(xiàn),這些部件的生產(chǎn)交由具體的builder去生產(chǎn)。

代碼
//建造者模式
var DP = require("./DesignPattern.js");

function Car() {
  var _frame, _engine, _wheel;
  this.setFrame = function (val) {
    _frame = val;
  };
  this.setEngine = function (val) {
    _engine = val;
  };
  this.setWheel = function (val) {
    _wheel = val;
  };
  this.getFrame = function () {
    return _frame
  };
  this.getEngine = function () {
    return _engine
  };
  this.getWheel = function () {
    return _wheel
  };
  this.check = function () {
    console.log(_frame + "檢查完畢");
    console.log(_engine + "檢查完畢");
    console.log(_wheel + "檢查完畢");
  };
}

//抽象生產(chǎn)者
function Builder() {
  DP.Interface(this, ["buildFrame", "buildEngine", "buildWheel", "buildCar"])
}

//指導(dǎo)者,產(chǎn)品生產(chǎn)流程規(guī)范
function Director(Builder) {
  //傳入具體制造者
  var _builder = Builder;
  this.build = function () {
    _builder.buildFrame();
    _builder.buildEngine();
    _builder.buildWheel();
    return _builder.buildCar();
  };
}

function Builder911() {
  this.__proto__ = new Builder();
  var _car = new Car();
  this.buildFrame = function () {
    console.log("制造911骨架");
    _car.setFrame("911骨架");
  };
  this.buildEngine = function () {
    console.log("制造911引擎");
    _car.setEngine("911引擎");
  };
  this.buildWheel = function () {
    console.log("制造911輪子");
    _car.setWheel("911輪子");
  };
  this.buildCar = function () {
    console.log("911汽車各部組裝完畢");
    return _car;
  };
}

function BuilderCayma() {
  this.__proto__ = new Builder();
  var _car = new Car();
  this.buildFrame = function () {
    console.log("制造Cayma骨架");
    _car.setFrame("Cayma骨架");
  };
  this.buildEngine = function () {
    console.log("制造Cayma引擎");
    _car.setEngine("Cayma引擎");
  };
  this.buildWheel = function () {
    console.log("制造Cayma輪子");
    _car.setWheel("Cayma輪子");
  };
  this.buildCar = function () {
    console.log("Cayma汽車各部組裝完畢");
    return _car;
  };
}

var builder911 = new Builder911();
var director911 = new Director(builder911);
var car911 = director911.build();
car911.check();

var builderCayma = new BuilderCayma();
var directorCayma = new Director(builderCayma);
var Cayma = directorCayma.build();
Cayma.check();
適用場景

需要生成的對(duì)象具有復(fù)雜的內(nèi)部結(jié)構(gòu);需要生成的對(duì)象內(nèi)部屬性本身相互依賴。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79491.html

相關(guān)文章

  • JS 建造模式

    摘要:如何應(yīng)對(duì)這種變化如何提供一種封裝機(jī)制來隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說的建造者模式。建造者模式,將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過程可以采用不同的表示。 1. 簡介 在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著...

    channg 評(píng)論0 收藏0
  • js常用設(shè)計(jì)模式實(shí)現(xiàn)(三)建造模式

    摘要:創(chuàng)建型模式創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式建造者模式的定義將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程 創(chuàng)建型模式 創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離 關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型...

    Apollo 評(píng)論0 收藏0
  • 一天一個(gè)設(shè)計(jì)模式JS實(shí)現(xiàn)——建造模式

    摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 參考文章:java設(shè)計(jì)模式之建造者模式 一、什么是建造者模式建造者模式:是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個(gè)類的模式,而建造者模式則是將各種產(chǎn)品集中起來進(jìn)行管理,用來創(chuàng)建復(fù)合對(duì)象,所謂...

    boredream 評(píng)論0 收藏0
  • 細(xì)談JavaScript中的一些設(shè)計(jì)模式

    摘要:注意事項(xiàng)聲明函數(shù)時(shí)候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實(shí)現(xiàn)初始化構(gòu)造函數(shù)大寫字母開頭推薦注意的成本。簡單工廠模式使用一個(gè)類通常為單體來生成實(shí)例。 @(書籍閱讀)[JavaScript, 設(shè)計(jì)模式] 常見設(shè)計(jì)模式 一直對(duì)設(shè)計(jì)模式不太懂,花了一下午加一晚上的時(shí)間,好好的看了看各種設(shè)計(jì)模式,并總結(jié)了一下。 設(shè)計(jì)模式簡介 設(shè)計(jì)模式概念解讀 設(shè)計(jì)模式的發(fā)展與在JavaScript中的應(yīng)用 ...

    30e8336b8229 評(píng)論0 收藏0
  • 深入理解建造模式 ——組裝復(fù)雜的實(shí)例

    摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個(gè)新產(chǎn)品。最后通過一個(gè)套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計(jì)模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問題看這篇就夠了 無論是在現(xiàn)實(shí)世界中還是在軟件...

    sanyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<