日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

三言兩語說透設計模式的藝術-原型模式

來源: 責編: 時間:2023-08-09 23:02:39 457觀看
導讀1提升對象創建效率:原型模式的智慧原型模式(Prototype Pattern)是一種創造型設計模式,其核心思想在于通過復制“原型”來創建對象,而非直接實例化。在原型模式中,我們首先創造一個原型對象,接著通過對其進行復制,獲得新的實例

1提升對象創建效率:原型模式的智慧

原型模式(Prototype Pattern)是一種創造型設計模式,其核心思想在于通過復制“原型”來創建對象,而非直接實例化。在原型模式中,我們首先創造一個原型對象,接著通過對其進行復制,獲得新的實例。這些原型對象儲存在一個共享的“原型管理器”中,當需要新的對象時,只需從管理器獲取原型的復制。Ge828資訊網——每日最新資訊28at.com

2原型模式的實現

讓我們以一個具體場景為例,考慮開發一個鴨子養殖游戲。游戲中需要生成兩種鴨子:北京鴨和綠頭鴨。這兩種鴨子共享一些屬性和方法,如叫聲、游泳和渲染模型,但叫聲和渲染模型是不同的。Ge828資訊網——每日最新資訊28at.com

如果每次都從頭創建鴨子對象,將會產生大量冗余代碼,如下所示:Ge828資訊網——每日最新資訊28at.com

const duck1 = {  name: '鴨子1',  quack() {},  swim() {},  render() {}};const duck2 = {  name: '鴨子2',  quack() {},  swim() {},  render() {}};

這種方式重復定義相同的 quack 和 swim 方法,效率低下。如果使用簡單工廠模式,代碼如下:Ge828資訊網——每日最新資訊28at.com

function createDuck(type) {  let duck;  if (type === 'beijing') {    duck = new BeijingDuck();   } else if (type === 'greenheaded') {    duck = new GreenHeadedDuck();  }  duck.swim = function() {    console.log('swimming...');  }    duck.render = function() {     console.log('render duck model...')  }  return duck; }const beijingDuck = createDuck('beijing'); const greenDuck = createDuck('greenheaded');

但是,這樣每次創建鴨子對象都需要重新定義 swim 和 render 方法,不夠高效。Ge828資訊網——每日最新資訊28at.com

更優雅的方式是將共有部分提取為一個原型:Ge828資訊網——每日最新資訊28at.com

// 鴨子原型const DuckPrototype = {  swim() {},  render() {} };// 創建具體鴨子時復制原型function createBeijingDuck() {  const duck = Object.create(DuckPrototype);    duck.quack = function() {}    return duck;}function createGreenDuck() {  const duck = Object.create(DuckPrototype);  duck.quack = function() {}      return duck; }

以上代碼展示了如何在鴨子游戲中應用原型模式。通過原型模式,我們只需定義一次共有屬性和方法,然后通過復制原型來實例化新對象。這避免了重復代碼,提高了對象創建效率,并建立了對象之間的關系,方便基于原型進行擴展。Ge828資訊網——每日最新資訊28at.com

原型模式與相關模式的區別:Ge828資訊網——每日最新資訊28at.com

  • 在工廠方法模式中,對象創建邏輯在工廠內部,而原型模式通過復制原型來創建對象。
  • 單例模式生成唯一實例,而原型模式可以生成多個相似實例。
  • 建造者模式適用于創建過程復雜的對象,而原型模式適用于對象實例化復雜的情況。

那么,如何使用 TypeScript 實現更優雅的原型模式呢?Ge828資訊網——每日最新資訊28at.com

// 原型接口interface Prototype {  clone(): Prototype; }// 原型管理器類class PrototypeManager {  private prototypes: {[key: string]: Prototype} = {};  // 省略方法定義}// 具體原型類class ConcretePrototype implements Prototype {  clone() {    return Object.create(this);  }}// 使用// 初始化原型管理器const manager = new PrototypeManager();// 設置原型對象manager.set('proto', new ConcretePrototype());  // 請求原型復制實例化const prototypeInstance = manager.get('proto').clone();

以上代碼定義了原型接口、原型管理器類和具體原型類,還提供了簡單的使用示例。從示例中可以看出,原型模式的關鍵是通過原型管理器來復制原型對象從而創建實例。Ge828資訊網——每日最新資訊28at.com

3原型模式的優缺點

原型模式的主要優點包括:Ge828資訊網——每日最新資訊28at.com

  • 提高實例化對象的效率:通過復制原型對象,避免了重復的初始化操作。
  • 隱藏實例化的復雜度:客戶端不需要了解具體的對象創建過程,只需請求原型的復制即可。
  • 避免構造函數污染:由于實例化是通過復制原型對象實現的,無需向構造函數中添加不必要的代碼。
  • 動態添加和刪除原型:可以在運行時擴展或減少原型對象,客戶端可以直接使用新增的原型來實例化對象。

原型模式的缺點包括:Ge828資訊網——每日最新資訊28at.com

  • 需要定義接口并確保每個具體原型類都實現了該接口,增加了一定的開發成本。
  • 需要注意原型實例和原型之間的關系,例如修改原型會影響到其他實例。

4應用場景

原型模式在以下場景中常見應用:Ge828資訊網——每日最新資訊28at.com

  • 對象創建成本較高:通過復制原型來提高效率,例如在游戲中創建怪物對象。
  • 系統需要產生預定義原型的實例:例如用于測試的假日期對象或假支付賬單對象。
  • 類的初始化需要參數:通過原型模式避免構造函數過于復雜。
  • 需要動態地創建復雜對象:客戶端只需要關注如何獲取對象,無需了解具體創建過程。

以下是一些建議,在前端開發中更適合使用原型模式的情況:Ge828資訊網——每日最新資訊28at.com

1)創建組件類的原型:通過創建組件類的原型對象,使用 Object.create() 方法基于該原型快速創建組件實例,從而避免重復編寫組件邏輯。Ge828資訊網——每日最新資訊28at.com

// 原型類const ComponentPrototype = {  // 組件邏輯  render() {    // ...  }};// 基于原型創建實例 const ComponentInstance = Object.create(ComponentPrototype);

2)復用和配置原型對象:設計一些可配置的原型對象,如 API 配置對象,然后復制和配置這些原型來生成不同的實例,避免重復創建。Ge828資訊網——每日最新資訊28at.com

// 可配置的原型const APIConfigPrototype = {  baseURL: 'https://example.com',  timeout: 1000,};// 復制原型并配置生成實例const config = Object.assign({}, APIConfigPrototype, {  timeout: 3000  });

3)代理原型對象:通過原型對象實現代理,避免每次訪問都重新創建目標對象。Ge828資訊網——每日最新資訊28at.com

// 原型作為代理對象const proxyPrototype = {  target: null,  get(key) {    // 懶加載    if (!this.target) {      this.target = createTargetObject();     }    return this.target[key];  }}// 使用代理原型 const proxy = Object.create(proxyPrototype);proxy.foo // 觸發代理邏輯

5原型模式與 JavaScript 中的 Prototype

原型模式和 JavaScript 中的原型繼承(prototype)存在以下主要區別:Ge828資訊網——每日最新資訊28at.com

  • 原型模式是一種設計模式,是抽象的概念,而 JavaScript 中的 prototype 是一種具體的繼承實現機制。
  • 原型模式的核心在于原型管理器,用于存儲和管理不同的原型對象。而 JavaScript 中的 prototype 屬性是函數的一個屬性,指向包含由該函數創建的對象共享的屬性和方法的對象。
  • 原型模式通過復制原型對象來創建新的實例,原型與實例之間沒有必然的關系。而 JavaScript 中的原型繼承是建立原型和實例之間的關系,實例通過 proto 屬性關聯到原型,可以直接訪問原型的屬性和方法。
  • 原型模式可以創建多個相似的對象實例,是一種對象復用的方式。而 JavaScript 中的原型繼承是實現類繼承的方式,通過 prototype 屬性建立原型鏈,主要用于實現對象的繼承和復用。
  • 原型模式中,原型對象和實例對象通常相互隔離,修改實例不會影響到原型。而在 JavaScript 原型繼承中,修改原型會影響到所有實例,因為實例引用了原型。
  • 原型模式可以動態注冊和刪除原型,而 JavaScript 中的原型關系是在首次實例化時建立的,之后不可更改。

綜上所述,原型模式是一種更抽象和全面的對象復用方式,而 JavaScript 中的原型繼承只是一種具體的繼承實現方式,它們在核心思想上有所不同。然而,它們在提高實例化效率方面具有一定的相似性。Ge828資訊網——每日最新資訊28at.com

6總結

原型模式是一種創造型設計模式,通過復制現有對象的原型來創建新對象,提高對象創建效率和復用性。核心思想是在一個原型對象的基礎上,通過復制來生成新實例,避免重復初始化。Ge828資訊網——每日最新資訊28at.com

在實際開發中,原型模式優化對象創建,通過共享原型對象避免重復定義屬性和方法,提高代碼效率。例如,前端可用于創建組件實例,避免重復編寫組件邏輯。Ge828資訊網——每日最新資訊28at.com

實現原型模式包括創建原型對象,然后通過復制原型創建新實例。原型對象通常存儲于原型管理器中,供需要創建對象時復制使用。Ge828資訊網——每日最新資訊28at.com

與JavaScript的原型繼承不同,原型模式更抽象靈活。它動態添加刪除原型,避免構造函數污染,隱藏實例化復雜性。注意每具體原型需實現接口,增加開發成本。Ge828資訊網——每日最新資訊28at.com

總之,原型模式通過復制對象的原型創建新對象,提高對象創建效率和復用性。頻繁創建相似對象場景下,原型模式是有用設計模式。Ge828資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-5142-0.html三言兩語說透設計模式的藝術-原型模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Rust“巨坑”?真相來了!

下一篇: 字節客戶端也瘋狂拷打基礎!

標簽:
  • 熱門焦點
  • 容量越大越不壞?24萬塊硬盤故障率報告公布 這些產品零故障

    8月5日消息,云存儲服務商Backblaze發布了最新的硬盤故障率報告,年故障率有所上升。Backblaze發布的硬盤季度統計數據,其中包括故障率等重要方面。這些結
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人“珍藏”是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
  • 榮耀Magic4 至臻版 首創智慧隱私通話 強勁影音系統

    2022年第一季度臨近尾聲,在該季度內,許多品牌陸續發布自己的最新產品,讓大家從全新的角度來了解當今的手機技術。手機是電子設備中,更新迭代十分迅速的一款產品,基
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产九区一区在线| 亚洲欧美999| 红桃视频亚洲| 极品尤物av久久免费看| 亚洲国产欧美在线人成| 中文高清一区| 久久国产精品一区二区三区四区| 久久尤物视频| 欧美日韩在线亚洲一区蜜芽| 国产日韩欧美电影在线观看| 亚洲国产专区| 亚洲欧美不卡| 麻豆av福利av久久av| 欧美高清视频一二三区| 国产精品激情电影| 一区二区三区在线免费观看| 9人人澡人人爽人人精品| 欧美一区二区女人| 欧美精品1区2区| 国产欧美日韩亚洲精品| 亚洲欧洲三级| 欧美一区二区三区在线视频 | 快播亚洲色图| 欧美三级午夜理伦三级中视频| 国产亚洲欧美日韩一区二区| 亚洲久久一区| 久久精品视频导航| 欧美日韩另类字幕中文| 韩国女主播一区二区三区| 亚洲视频一二区| 欧美91大片| 国产亚洲一级高清| 亚洲视频免费在线| 欧美成人免费在线视频| 国产日韩精品一区二区三区在线| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲欧美日韩在线高清直播| 欧美成人免费全部观看天天性色| 国产欧美精品一区二区色综合| 91久久久久久国产精品| 久久av一区二区三区漫画| 欧美三级视频在线观看| 亚洲国产天堂久久综合| 久久精品最新地址| 国产精品三上| 一区二区三区国产盗摄| 欧美成人官网二区| 激情欧美一区二区三区| 性欧美大战久久久久久久久| 欧美视频亚洲视频| 亚洲区第一页| 男女激情久久| 精品动漫av| 久久不射网站| 国产乱码精品一区二区三区忘忧草| 日韩视频永久免费| 免费亚洲一区| 亚洲第一色中文字幕| 久久精品夜色噜噜亚洲a∨| 国产精品久久网| 一区二区三区高清视频在线观看 | 欧美激情视频一区二区三区免费 | 亚洲精品一区二区三区99| 久久一区二区三区国产精品| 国产日韩在线看| 午夜精品视频网站| 国产精品国产三级国产专播品爱网| 亚洲精品在线观看视频| 欧美国产先锋| 亚洲二区精品| 免费一级欧美片在线播放| 亚洲大胆女人| 蜜臀av一级做a爰片久久| 在线成人中文字幕| 久久伊人免费视频| 伊甸园精品99久久久久久| 久久精品视频在线观看| 国产一区二区视频在线观看| 欧美在线免费一级片| 国产日韩成人精品| 久久国产精品99国产| 国产在线拍揄自揄视频不卡99| 欧美一区二区精品| 国产一区成人| 久久免费视频网| 精品69视频一区二区三区| 久久人人爽爽爽人久久久| 在线观看日韩欧美| 免费高清在线一区| 亚洲三级影院| 欧美午夜精品久久久| 亚洲视频在线观看一区| 国产精品视频| 欧美一区二区三区男人的天堂 | 亚洲视频你懂的| 国产精品免费视频观看| 午夜精品三级视频福利| 国产偷久久久精品专区| 久久精品国产精品亚洲| 精品91在线| 欧美成人一区二区三区在线观看| 亚洲精品综合久久中文字幕| 欧美日韩一区二区视频在线观看| 亚洲社区在线观看| 国产欧美1区2区3区| 久久久久久伊人| 亚洲激情图片小说视频| 欧美日韩在线一二三| 亚洲欧美在线播放| 激情视频一区二区| 欧美国产国产综合| 亚洲无毛电影| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 国产一区二区丝袜高跟鞋图片| 久久夜色精品国产欧美乱极品| 亚洲精品护士| 国产精品美女xx| 久久久久9999亚洲精品| 亚洲激情啪啪| 国产精品mv在线观看| 久久9热精品视频| 最近中文字幕日韩精品| 国产精品高清在线观看| 久久精品国产免费| 亚洲精选视频免费看| 国产精品久久久爽爽爽麻豆色哟哟| 久久高清国产| 日韩网站在线| 国产一区二区三区日韩欧美| 欧美成年视频| 亚洲欧美日韩电影| 亚洲国产精品成人一区二区| 欧美色综合天天久久综合精品| 欧美在线观看视频一区二区三区| 亚洲国产精品精华液2区45| 国产精品免费一区豆花| 麻豆精品在线播放| 亚洲综合成人在线| 亚洲第一精品福利| 国产精品久在线观看| 老司机aⅴ在线精品导航| 亚洲一区国产一区| 亚洲国产精品黑人久久久| 国产精品一区亚洲| 欧美精品免费在线| 久久国产视频网站| 一区二区高清视频| 在线看成人片| 国产女人18毛片水18精品| 欧美日本精品一区二区三区| 久久精品国产清高在天天线 | 欧美在线不卡视频| 99精品福利视频| 激情综合在线| 国产精品欧美在线| 欧美精品v日韩精品v韩国精品v| 欧美在线免费| 亚洲网站在线| 亚洲人精品午夜在线观看| 国产亚洲一区二区在线观看 | 韩日欧美一区二区| 国产精品普通话对白| 欧美精品日韩www.p站| 久久蜜臀精品av| 午夜激情一区| av成人国产| 亚洲激情不卡| 黄色成人免费观看| 国产欧美日韩中文字幕在线| 欧美日韩一卡二卡| 欧美成人亚洲成人日韩成人| 久久久av毛片精品| 欧美一级视频免费在线观看| 中文在线资源观看网站视频免费不卡| 亚洲电影第三页| 黄色av日韩| 国产亚洲视频在线| 国产精品影音先锋| 国产精品久久久久久久一区探花| 欧美精品一区二区久久婷婷| 老司机精品视频网站| 久久国产精品99国产精| 欧美一区二区三区播放老司机| 亚洲性人人天天夜夜摸| 亚洲美女黄色片| 亚洲欧洲精品成人久久奇米网 | 中文国产成人精品| 日韩一区二区久久| 亚洲国产精品久久久久秋霞影院| 国内外成人免费激情在线视频 | 亚洲特级毛片| 99在线精品观看| 亚洲精品欧美精品| 亚洲国产精品尤物yw在线观看| 激情六月婷婷久久| 狠狠色丁香婷婷综合| 国产一区三区三区| 国产一区二区三区黄| 国产亚洲欧美一级| 国模私拍视频一区| 激情一区二区三区| 在线观看一区欧美| 精品电影一区| 亚洲国产天堂网精品网站|