0
点赞
收藏
分享

微信扫一扫

设计模式—创建型工厂模式之抽象工厂JAVA实现(工厂模式完结)

进击的铁雾 2022-03-22 阅读 60

这是工厂模式的第三篇没有看前两篇的建议看完之前写的两篇,再看这篇文章,这样子会让你更能理解工厂模式的抽象工厂,抽象工厂使用一个产品族拥有多款产品类型,不同的产品族又构成等级关系。

抽象工厂的优缺点:

简单工厂模式文章链接:设计模式—创建型工厂模式之简单工厂JAVA实现_chenxiky的博客-CSDN博客

工厂方法模式文章链接:设计模式—创建型工厂模式之工厂方法JAVA实现_chenxiky的博客-CSDN博客

我举一个汽车简单的例子来理解抽象工厂:

奔驰:轿车 越野 SUV (一个产品族)

宝马:轿车 越野 SUV (一个产品族)

等级 等级 等级(相同)

代码目录结构图:

 通过以上的目录结构我们就很清楚的看到抽象工厂实现支付宝支付退款,微信支付退款的复杂性

首先我们要先编写支付,退款的公共类(面向接口编程):

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/14:09
 * @Description: 支付抽象接口
 */
public interface  IPay   {

    /**
     * 统一下单
     */
    void unifiedorder();
}
package top.chenxiky.factory.abstracted;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/15:58
 * @Description: 退款抽象的接口
 */
public interface IRefund {
    /**
     * 统一退款
     */
    void refund();
}

编写订单抽象工厂类:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/15:56
 * @Description: 订单抽象工厂 : 含有支付 退款抽象
 */
public interface OrderFactory {
    /**
     * 支付的工厂
     * @return
     */
    IPay createPay();

    /**
     * 退款的工厂
     * @return
     */
    IRefund createRefund();
}

再进行ali包的编写,实现支付宝支付和退款的两个实现类:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/14:08
 * @Description: 支付宝支付实现类
 */
public class AliIPay implements IPay {
    @Override
    public void unifiedorder() {
        //TODO 支付宝支付的业务逻辑
        System.out.println("支付宝支付,统一下单。");
    }
}
package top.chenxiky.factory.abstracted.ali;


import top.chenxiky.factory.abstracted.IRefund;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/16:03
 * @Description: 支付宝退款成功实现类
 */
public class AliIRefund implements IRefund {
    @Override
    public void refund() {
        //TODO 支付宝退款的业务逻辑
        System.out.println("支付宝退款成功");
    }
}

 编写支付工厂:

package top.chenxiky.factory.abstracted.ali;

import top.chenxiky.factory.abstracted.OrderFactory;
import top.chenxiky.factory.abstracted.IPay;
import top.chenxiky.factory.abstracted.IRefund;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/16:01
 * @Description: 支付宝的工厂: 有支付,退款功能
 */
public class AliOrderFactory implements OrderFactory {
    @Override
    public IPay createPay() {
        return new AliIPay();
    }

    @Override
    public IRefund createRefund() {
        return new AliIRefund();
    }
}

wechat包也同上的方式我在这里就不写出来了。

构建一个超级工厂创造器:
/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/16:20
 * @Description: 超级工厂创造器,简单工厂模式
 */
public class FactoryProducer {

    public static OrderFactory getFactory(String type){
        if (type.equalsIgnoreCase("WECHAT")){
            return new WechatOrderFactory();
        }else if(type.equalsIgnoreCase("ALI")){
            return new AliOrderFactory();
        }
        return null;
    }
}

通过超级工程创造器的代码,我们似乎又回到了之前的简单工程模式,通过类型来获取相应的支付功能。 

测试主程序代码:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/16:24
 * @Description:
 */
public class Main {
    public static void main(String[] args) {

        // 调用支付宝模块
        OrderFactory ali = FactoryProducer.getFactory("ALI");
        ali.createPay().unifiedorder();
        ali.createRefund().refund();

        // 微信模块
        OrderFactory wechat = FactoryProducer.getFactory("WECHAT");
        wechat.createPay().unifiedorder();
        wechat.createRefund().refund();       

    }
}

举报

相关推荐

0 条评论