Lambda实现设计模式------工厂模式

使用工厂模式,你无需向使用者暴露实例化的逻辑就能完成对象的创建。

非Lambda实现:
例子:银行工作,他们需要一种方式创建不同的金融产品:贷款、期权、股票
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);
        }
    }
}
这里贷款(Loan)、股票(Stock)和债券(Bond)都是产品(Product)的子类。在创建对象时不用再担心会将构造函数或者配置暴露给客户,这使得客户创建产品时更加简单:

Product p = ProductFactory.createProduct("loan");

Lambda实现:

lambda可以实现像引用方法一样引用构造函数

Supplier<Product> loanSupplier = Loan::new;
Loan loan = loanSupplier.get();
public class ProductFactory {
    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);
    }
    public static Product createProduct(String name){
    Supplier<Product> p = map.get(name);
    if(p != null) return p.get();
    throw new IllegalArgumentException("No such product " + name);
    }
}


猜你喜欢

转载自blog.csdn.net/qq360694660/article/details/80803125