智能合約開發實戰(19) - factory pattern 工廠模式

更新於 發佈於 閱讀時間約 1 分鐘
factory pattern 工廠模式簡單的說就是負責創建一系列相同品質的智能合約為什麼說是相同品質呢?因為有相同的模版,所以做出來的智能合約品質也會相同,我知道看到這裡可能還是有人會覺得霧煞煞的,沒關係,我們用下面的實作來說明就會比較清楚了:
在上程式碼之前先說明一下為什麼需要在 Solidity 中使用工廠模式有以下三種原因:
  • 如果您想創建同一個合約的多個實例,並且您正在尋找一種方法來跟踪它們並使它們的管理更容易。
  • 部署時節省氣體:您可以僅部署工廠,稍後使用它來部署其他合約。
  • 提高合約安全性。
接下來我們就來實作一下,我們用車來說明,這樣大家應該會比較了解一點,直接上程式碼:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
//汽車模版
contract Car {
  string public model;
  address public owner;
  uint public cost;
  constructor(string memory _model, address _owner) payable {
    model = _model;
    owner = _owner;
    cost = msg.value;
  }
}
//汽車工廠
contract CarFactory {
  Car[] public cars;// 記錄汽車
  // function create(string memory _model) public {
  //     Car car = new Car(_model, address(this));
  //     cars.push(car);
  // }
  function createWithMoney(string memory _model) public payable {
    //必須有足夠的乙太幣才行
    require(msg.value >=1 ether, "Not enough money");
    //創建一台車
    Car car = new Car{value: msg.value}(_model, address(this));
    cars.push(car);//記錄所有創建的車
  }
}
上面是一個簡單的範例,說明的是建立一個汽車的模版,正常來說我如果要創建不同汽車合約,我必須要寫很多個smart contract,這時候就需要有一個模版來幫我們快速的創建這些汽車合約,然後CarFactory就是我們的汽車工廠,裡面就能引用Car(汽車模版)來幫我們創建很多的汽車,而不需要寫一個一個的合約,另外有一個優點是:方便管理這些創建出來的子合約,由於子合約是統一由汽車工廠創造的,當然也就方便我們查找特定的合約或是禁用該合約囉,當然相關在創建時的檢查當然也是少不了的,以上就是一個簡單針對工廠模式的說明,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
下面來Deploy看看: Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。 實現從MyContract經由接口去調用Counter的increment 可以藉由調用Uniswap的Interface來查看Uniswap兩個幣目前的流動狀況:
講完Import,這一篇我們來講講也是很重要的Library,我們之前有提到,程式是愈直覺簡單愈好,可以大大的減少維護成本,把可以共用的部份都抽離出來寫成部份程式碼就是我們今天要講的Library,可以是共用的功能或是檢查。 Library.sol testLibrary.sol
下面我們就來講解Import該怎麼使用及可以調用外部在GitHub上面寫好的合約,比如說OpenZeppelin的ERC20合約。
創建兩個合約A和B,介紹怎麼由合約B去調用合約A
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
下面來Deploy看看: Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。 實現從MyContract經由接口去調用Counter的increment 可以藉由調用Uniswap的Interface來查看Uniswap兩個幣目前的流動狀況:
講完Import,這一篇我們來講講也是很重要的Library,我們之前有提到,程式是愈直覺簡單愈好,可以大大的減少維護成本,把可以共用的部份都抽離出來寫成部份程式碼就是我們今天要講的Library,可以是共用的功能或是檢查。 Library.sol testLibrary.sol
下面我們就來講解Import該怎麼使用及可以調用外部在GitHub上面寫好的合約,比如說OpenZeppelin的ERC20合約。
創建兩個合約A和B,介紹怎麼由合約B去調用合約A
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
當你在開發應用程式時,可能會面臨要建立不同物件的需求。這時候簡單工廠模式(Simple Factory Pattern)是一個很實用的解決方案。今天我們就來用特斯拉汽車工廠的例子來解釋這個概念。 什麼是簡單工廠模式? 簡單工廠模式的核心思想是:將物件的建立過程封裝起來,客戶端(也就是使用者)只需要
在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(Factory Method Pattern)提供了一種方式來建立單一物件,這個方法可以在子類中覆寫以產生不同的物件。而抽象工廠模式(Abstract Factory Pattern)在這個基礎上
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
當你在開發應用程式時,可能會面臨要建立不同物件的需求。這時候簡單工廠模式(Simple Factory Pattern)是一個很實用的解決方案。今天我們就來用特斯拉汽車工廠的例子來解釋這個概念。 什麼是簡單工廠模式? 簡單工廠模式的核心思想是:將物件的建立過程封裝起來,客戶端(也就是使用者)只需要
在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(Factory Method Pattern)提供了一種方式來建立單一物件,這個方法可以在子類中覆寫以產生不同的物件。而抽象工廠模式(Abstract Factory Pattern)在這個基礎上
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿