创新设计模式:工厂模式

以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族。

下一个模式是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值