netflix 模式创新
以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族。
下一个模式是Factory模式 。 当涉及到Java时,工厂模式是最常用的模式之一。
那么工厂模式到底是什么呢? 工厂模式处理创建对象而不指定确切的类或将要创建的对象。
让我们通过使用工厂模式解决凭证问题来付诸行动。
假设我们在应用程序中具有忠诚度功能,该功能会根据客户的交易向客户提供一些优惠券。
凭证需要凭证代码,并且由于它将显示在应用程序中,因此需要特殊格式的html消息。
第一步是创建凭证界面。
package com.gkatzioura.design.creational.factory;public interface Voucher {public String code();public String htmlMessage();
}
目前,我们将提供两种类型的凭证,但是,一旦业务人员提出了更多的想法,就可以轻松添加更多的凭证。
第一个是食品券。
package com.gkatzioura.design.creational.factory;import java.util.UUID;public class FoodVoucher implements Voucher {private UUID code;private static final String htmlMessage= "<html><body>
<h1>Food Voucher</h1></body></html>";public FoodVoucher() {code = UUID.randomUUID();}public String code() {return code.toString();}public String htmlMessage() {return htmlMessage;}
}
第二个是衣服券。
package com.gkatzioura.design.creational.factory;import java.util.UUID;public class ClothesVoucher implements Voucher {private UUID code;private static final String htmlMessage = "<html><body>
<h1>Clothes Voucher</h1></body></html>";public ClothesVoucher() {code = UUID.randomUUID();}public String code() {return code.toString();}public String htmlMessage() {return htmlMessage;}
}
凭单将基于交易点系统创建。
如果交易点少于30个,则将创建食品券。 对于高于30的交易点,应创建服装代金券。
因此,下一步是创建一种机制,该机制将基于交易点创建凭证。 最好的选择是工厂模式。
package com.gkatzioura.design.creational.factory;public class VoucherFactory {public Voucher create(Integer discountPoints) {if(discountPoints<=0) {throw new IllegalArgumentException("Invalid number of discount points!");}if(discountPoints<30) {return new FoodVoucher();} else {return new ClothesVoucher();}}}
通过选择工厂模式进行总结
- 我们创建所需的凭证,而不会向客户透露任何创建逻辑。
- 客户端不必指定将要创建的对象的确切类。
您可以在github上找到源代码。
在下一篇博客文章中,我们将介绍构建器模式 。
另外,我还编写了备忘单,其中包含“创作设计模式”的摘要。
在链接中注册以接收它。
翻译自: https://www.javacodegeeks.com/2018/03/creational-design-patterns-factory-pattern.html
netflix 模式创新