3、创建型设计模式-工厂模式

2021-07-06  本文已影响0人  日落_3d9f

工厂模式介绍:

工厂模式

工厂模式有 3 种不同的实现方式

应用场景:

简单工厂模式

核心组成:

实现步骤

优点:

缺点

文件目录:


项目文件目录

抽象类:

public interface Pay {
    /**
     * 统一下单
     */
    void unifiedorder();
}

具体产品类-微信支付:

public class WechatPay implements Pay {

    @Override
    public void unifiedorder() {
        System.out.println("微信支付支付 统一下单接口");
    }
}

具体产品类-支付宝支付:

public class AliPay implements Pay {
    @Override
    public void unifiedorder() {

        System.out.println("支付宝支付 统一下单接口");

    }
}

工厂类:

public class SimplePayFactory {


    /**
     * 根据参数 返回对应的支付对象
     *
     * @param payType
     * @return
     */
    public static Pay createPay(String payType) {
        if (payType == null) {
            return null;
        } else if (payType.equalsIgnoreCase("WECHAT_PAY")) {
            return new WechatPay();
        } else if (payType.equalsIgnoreCase("ALI_PAY")) {
            return new AliPay();
        }
        //想拓展,直接编写更多
        return null;
    }
}

Main入口:

public class Main {
    public static void main(String[] args) {
        //Pay pay = SimplePayFactory.createPay("WECHAT_PAY");
        Pay pay = SimplePayFactory.createPay("ALI_PAY");
        pay.unifiedorder();
    }
}

工厂方法模式

工厂方法模式

代码:

/**
 * 抽象工厂方法
 */
public interface PayFactory {
    Pay getPay();
}

/**
 * 具体产品工厂
 */
public class AliPayFactory implements PayFactory {
    @Override
    public Pay getPay() {
        return new AliPay();
    }
}

/**
 * 抽象产品
 */
public interface Pay {
    /**
     * 统一下单
     */
    void unifiedorder();
}

/**
 * 具体产品
 */
public class AliPay implements Pay {
    @Override
    public void unifiedorder() {
        System.out.println("支付宝支付 统一下单接口");
    }
}
工厂方法

主代码:

public class Main {
    public static void main(String[] args) {
        PayFactory aliPayFactory = new AliPayFactory();
        Pay aliPay = aliPayFactory.getPay();
        aliPay.unifiedorder();
    }
}

抽象工厂方法模式

工厂模式有 3 种不同的实现方式

背景

抽象工厂

实现步骤:
1、定义两个接口 Pay、Refund
2、创建具体的Pay产品、创建具体的Refund产品
3、创建抽象工厂 OrderFactory 接口
里面两个方法 createPay/createRefund
4、创建支付宝产品族AliOderFactory,实现OrderFactory抽象工厂
5、创建微信支付产品族WechatOderFactory,实现OrderFactory抽象工厂
6、定义一个超级工厂创造器,通过传递参数获取对应的工厂


抽象工厂实现步骤

编码实践:


代码结构

超级工厂:

public interface OrderFactory {
    PayFactory createPay();
    RefundFactory createRefund();
}

产品族工厂的产品,可以不叫Factory,看公司团队规范,比如类名叫 IPay 也可以的

public interface PayFactory {
    /**
     * 统一下单
     */
    void unifiedorder();
}

同理,退款工厂

public interface RefundFactory {
    /**
     * 退款
     */
    void refund();
}

产品族工厂

public class AliOrderFactory implements OrderFactory {

    @Override
    public PayFactory createPay() {
        return new AliPay();
    }
    @Override
    public RefundFactory createRefund() {
        return new AliRefund();
    }
}

具体产品-支付

public class AliPay implements PayFactory {
    @Override
    public void unifiedorder() {
        System.out.println("支付宝支付 统一下单接口");
    }
}

具体产品-退款

public class AliRefund implements RefundFactory {
    @Override
    public void refund() {
        System.out.println("支付宝 退款");
    }
}

超级工厂生产器,传参生产对应的子工厂

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;
    }
}

Main函数调用:

public class Main {
    public static void main(String[] args) {
        OrderFactory orderFactory = FactoryProducer.getFactory("ALI");
        orderFactory.createPay().unifiedorder();
        orderFactory.createRefund().refund();
    }
}

工厂方法模式和抽象工厂方法模式:

优点:

缺点:

上一篇下一篇

猜你喜欢

热点阅读