使用Lambdas重構工廠設計模式
工廠設計模式讓我們建立物件而不將例項化邏輯暴露給客戶端。例如,假設您正在為銀行工作,他們需要一種建立不同金融產品的方式:貸款,債券,股票等。讓我們繪製一個類圖並編寫一些程式碼來理解Factory Design Pattern,然後使用lambda表示式來刪除樣板程式碼。
工廠設計模式:不使用Lambda表示式
通常我們使用一個負責建立不同物件的方法建立一個Factory類,如下所示:
public class FactoryMain { public static void main(String[] args) { Product p1 = ProductFactory.createProduct("loan"); } } public class ProductFactory { public static Product createProduct(String name){ switch(name){ case "loan": return new Loan(); case "stock": return new Stock(); case "bond": return new Bond(); default: throw new RuntimeException("No such product " + name); } } } static private interface Product {} static private class Loan implements Product {} static private class Stock implements Product {} static private class Bond implements Product {} } |
在這裡,貸款,股票和債券都是產品的子型別。所述createProduct() 方法可以有額外的邏輯來配置每個建立的產品。但好處是您現在可以建立這些物件,而無需將建構函式和配置暴露給客戶端,這使得客戶端的產品建立更簡單:
Product p = ProductFactory.createProduct("loan");
工廠設計模式:使用Lambda表示式
我們可以透過使用方法引用來引用建構函式,就像引用方法一樣。例如,以下是如何引用Loan建構函式:
Supplier<Product> loanSupplier = Loan::new; Loan loan = loanSupplier.get(); |
使用此技術,您可以透過建立將產品名稱對映到其建構函式的Map來重寫以前的程式碼:
private final static Map<String, Supplier<Product>> map = new HashMap<>(); static { map.put("loan", Loan::new); map.put("stock", Stock::new); map.put("bond", Bond::new); } |
讓我們使用這個Map來例項化不同的產品,就像你使用工廠設計模式一樣:
public static Product createProductLambda(String name){ Supplier<Product> p = map.get(name); if(p != null) return p.get(); throw new RuntimeException("No such product " + name); } |
相關文章
- 【重溫設計模式】之003工廠方法模式設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- 【重溫23種設計模式】之工廠方法模式設計模式
- 重學 Java 設計模式:實戰抽象工廠模式Java設計模式抽象
- 重學 Java 設計模式:實戰工廠方法模式Java設計模式
- 設計模式 —— 工廠模式設計模式
- 設計模式(工廠模式)設計模式
- 設計模式----工廠模式設計模式
- 【設計模式】工廠模式設計模式
- 設計模式-工廠模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 面試重點:設計模式(三)——工廠方法面試設計模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 設計模式 - 工廠方法模式設計模式
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- Java 設計模式(工廠模式)Java設計模式
- PHP設計模式-- 工廠模式PHP設計模式
- 【設計模式】工廠方法模式設計模式
- 設計模式 #2 (工廠模式)設計模式
- java設計模式 – 工廠模式Java設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式——抽象工廠模式設計模式抽象
- Java設計模式(工廠模式)Java設計模式
- Java設計模式-工廠模式Java設計模式
- 設計模式之【工廠模式】設計模式
- Java設計模式--工廠模式Java設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式之工廠模式設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 一.設計模式之工廠設計模式設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 設計模式-建立型模式-工廠模式(工廠三兄弟) TypeScript設計模式TypeScript
- 設計模式 - 抽象工廠設計模式抽象
- 工廠方法--設計模式設計模式