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

資訊專欄INFORMATION COLUMN

JS 設計模式 六(工廠模式)

raoyi / 2657人閱讀

摘要:首先吧之前的代碼打包成一個新的設計模式公用代碼工廠模式要點工廠接口是工廠方法模式的核心,與調用者直接交互用來提供產品。適用場景在任何需要生成復雜對象的地方,都可以使用工廠方法模式。

工廠模式

之前講了接口,封裝,繼承,單例等,現(xiàn)在就需要應用這些特性來完成一些設計模式了。首先吧之前的代碼打包成一個新的JS

DesignPattern.js
// 設計模式公用代碼     
exports.Interface = function (object, methods) {
  for (var i = 0, len = methods.length; i < len; i++) {
    if (typeof methods[i] !== "string") {
      throw new Error("Interface constructor expects method names to be passed in as a string.");
    }
    object[methods[i]] = function () {
      throw new Error(this.constructor.name + " Interface function is undefined");
    };
  }
};

exports.Extend = function (subClass, superClass) {
  var F = function () {
  };
  F.prototype = superClass.prototype;
  subClass.prototype = new F();
  subClass.prototype.constructor = subClass;

  subClass.superclass = superClass.prototype;
  if (superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
  }
}

exports.Clone = function (object) {
  function F() {
  }

  F.prototype = object;
  return new F;
}

exports.Augment = function (receivingClass, givingClass) {
  if (arguments[2]) { // Only give certain methods.
    for (var i = 2, len = arguments.length; i < len; i++) {
      receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
    }
  }
  else { // Give all methods.
    for (methodName in givingClass.prototype) {
      if (!receivingClass.prototype[methodName]) {
        receivingClass.prototype[methodName] = givingClass.prototype[methodName];
      }
    }
  }
}
工廠模式要點

1.工廠接口是工廠方法模式的核心,與調用者直接交互用來提供產品。

2.工廠實現(xiàn)決定如何實例化產品,是實現(xiàn)擴展的途徑,需要有多少種產品,就需要有多少個具體的工廠實現(xiàn)。

適用場景:

1.在任何需要生成復雜對象的地方,都可以使用工廠方法模式。有一點需要注意的地方就是復雜對象適合使用工廠模式,而簡單對象,無需使用工廠模式。

2.工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現(xiàn)的尤為明顯。假如調用者自己組裝產品需要增加依賴關系時,可以考慮使用工廠模式。將會大大降低對象之間的耦合度。

3.當需要系統(tǒng)有比較好的擴展性時,可以考慮工廠模式,不同的產品用不同的實現(xiàn)工廠來組裝。

代碼
var DP = require("./DesignPattern.js");

function CarFactory() {//定義工廠
  this.run = function () {
    console.log(this.productCar()+"啟動");
  }
  DP.Interface(this, ["productCar"]);
}

function PorscheFactory() {//實例化保時捷工廠
  this.__proto__ = new CarFactory();
  this.productCar = function () {
    return "保時捷";
  }
}

function TractorFactory() {//實例化拖拉機工廠并不重寫接口測試接口定義
  this.__proto__ = new CarFactory();
}

var Porsche = new PorscheFactory();
Porsche.run();


var Tractor = new TractorFactory();
Tractor.run();
總結

由于javascript沒有原生接口,所以需要自己想方法來實現(xiàn)接口這個原則。使用了接口以后就可以方便實現(xiàn)工廠模式。

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

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

相關文章

  • Junit源碼閱讀()之Junit中的設計模式

    摘要:前言在這次的博客中我們將著重于的許多集成性功能來討論中的種種設計模式。裝飾器模式裝飾器模式是為了在原有功能上加入新功能,在中絕對屬于使用最頻繁架構中最核心的模式,等都是通過裝飾器模式來完成擴展的。 前言 在這次的博客中我們將著重于Junit的許多集成性功能來討論Junit中的種種設計模式。可以說Junit的實現(xiàn)本身就是GOF設計原則的范例教本,下面就讓我們開始吧。 裝飾器模式 裝飾器...

    jlanglang 評論0 收藏0
  • JS或Jquery

    摘要:大潮來襲前端開發(fā)能做些什么去年谷歌和火狐針對提出了的標準,顧名思義,即的體驗方式,我們可以戴著頭顯享受沉浸式的網頁,新的標準讓我們可以使用語言來開發(fā)。 VR 大潮來襲 --- 前端開發(fā)能做些什么 去年谷歌和火狐針對 WebVR 提出了 WebVR API 的標準,顧名思義,WebVR 即 web + VR 的體驗方式,我們可以戴著頭顯享受沉浸式的網頁,新的 API 標準讓我們可以使用 ...

    CatalpaFlat 評論0 收藏0
  • 復習筆記(新手向) - JS對象聲明的幾種方式

    摘要:二用操作符構造對象屬性名屬性值屬性名屬性值屬性名屬性值屬性名屬性值方法名方法名首先用創(chuàng)建一個空對象,然后用多條語句給對象添加屬性方法。他的寫法與三用函數聲明的方式構造對象比較像,但是稍有不同。 -- 新手向知識,就不用ES6寫法了。 一、字面量聲明 var obj = { 屬性名1 : 屬性值, 屬性名2 : 屬性值, 屬性名3 : 屬性...

    davidac 評論0 收藏0
  • 詳解Spring中的9種設計模式「記得收藏」

    摘要:簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態(tài)決定應該創(chuàng)建哪一個產品類。中的就是簡單工廠模式的體現(xiàn),根據傳入一個唯一的標識來獲得對象,但是否是在傳入參數后創(chuàng)建還是傳入參數前創(chuàng)建這個要根據具體情況來定。中的就是典型的工廠方法模式。 showImg(https://segmentfault.com/img/bVbwbd9?w=640&h=492); 一. 簡單工廠又叫做靜態(tài)工廠方法(...

    Dean 評論0 收藏0
  • 前端面試題小集

    摘要:一一個頁面上兩個左右鋪滿整個瀏覽器,要保證左邊的一直為,右邊的跟隨瀏覽器大小變化比如瀏覽器為,右邊為,瀏覽器為,右邊為,請寫出大概的代碼。如果需要使用,最好是通過動態(tài)給添加屬性值,這樣可以繞開以上兩個問題。 一、一個頁面上兩個div左右鋪滿整個瀏覽器,要保證左邊的div一直為100px,右邊的div跟隨瀏覽器大小變化(比如瀏覽器為500,右邊div為400,瀏覽器為900,右邊div為...

    bawn 評論0 收藏0

發(fā)表評論

0條評論

raoyi

|高級講師

TA的文章

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