设计模式—创建型工厂模式之工厂方法JAVA实现

持之以恒的去坚持做一件事儿,现在在凌晨的1.40分。

工厂方法在我们日常的代码中还是比较常用到过的,我还是用之前简单工厂的支付例子来实现。

工厂方法模式优点如下:

 /**
     * 工厂方法模式
     * 优点如下:
     *  1.符合开闭原则,增加一个产品类,只需要实现其他具体的产品类和具体的工厂类
     *  2.符合单一职责原则:每一个工厂只负责生产对应的产品
     *  使用者只需要知道产品的抽象类,无需关心其他实现类
     *  满足:
     *  1.迪米特法则:最少知道原则,实体应尽量少的与其他实体之间发生相互的作用
     *  2.依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体
     *  3.里氏替换原则:俗称LSP,任何基类可以出现的地方,子类一定可以出现,
     *  对实例抽象化的具体步骤的规范
     *
     *  缺点如下:
     *  增加每一个产品,需要实现对应的具体工厂类和具体产品类
     *  每一产品需要有对应的具体工厂和具体产品类
     *
     */

首先我们先创建:抽查产品类,所有实例共有的公共接口

package top.chenxiky.factory.method;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/14:09
 * @Description: 抽查产品类,所有实例共有的公共接口
 */
public interface Pay {

    /**
     * 统一下单
     */
    void unifiedorder();
}

再实现支付宝支付实现类

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

微信支付实现类:
/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/14:10
 * @Description: 微信支付实现类
 */
public class WechatPay implements Pay {
    @Override
    public void unifiedorder() {
        //TODO 微信支付的业务逻辑
        //TODO: + 说明:
        //如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明
        //FIXME: + 说明:
        //如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。
        //XXX: + 说明:
        //如果代码中有该标识,说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进,要改进的地方会在说明中简略说明。

        System.out.println("微信支付,统一下单");
    }
}

 再编写抽象工厂:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/15:17
 * @Description: 抽象工厂方法
 */
public interface PayFactory {

    /**
     * 获取支付方式
     * @return
     */
    Pay getPay();
}
微信支付工厂:
/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/15:19
 * @Description: 微信支付工厂
 */
public class WechatPayFactory implements PayFactory{
    @Override
    public Pay getPay() {
        return  new WechatPay();
    }
}

支付宝支付工厂:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/15:18
 * @Description: 支付宝支付工厂
 */
public class AliPayFactory implements PayFactory {
    @Override
    public Pay getPay() {
        return new AliPay();
    }
}

 测试方法工厂的主函数:

package top.chenxiky.factory.method;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: chenxiky
 * @Date: 2022/03/20/14:19
 * @Description: 简单工厂类
 * 如果需要增加XX银行支付 只需要进行写相应的银行支付逻辑代码和该银行支付的工厂即可。
 */
public class MethodFactoryMain {
    public static void main(String[] args) {

        // 支付宝支付
        PayFactory aliPayFactory = new AliPayFactory();
        Pay aliPayFactoryPay = aliPayFactory.getPay();
        aliPayFactoryPay.unifiedorder();

        // 微信支付
        WechatPayFactory wechatPayFactory = new WechatPayFactory();
        Pay wechatPayFactoryPay = wechatPayFactory.getPay();
        wechatPayFactoryPay.unifiedorder();
    }
   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值