电商支付应用案例-简单工厂模式实践指南

DBC 710 0
  • 简单工厂模式
    • 又称静态工厂方法, 可以根据参数的不同返回不同类的实例,专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
    • 由于工厂方法是静态方法,可通过类名直接调用,而且只需要传入简单的参数即可 
  • 核心组成
    • Factory:工厂类,简单工厂模式的核心,它负责实现创建所有实例的内部逻辑
    • IProduct:抽象产品类,简单工厂模式所创建的所有对象的父类,描述所有实例所共有的公共接口
    • Product:具体产品类,是简单工厂模式的创建目标

 

  • 实现步骤
    • 创建抽象产品类,里面有产品的抽象方法,由具体的产品类去实现
    • 创建具体产品类,继承了他们的父类,并实现具体方法
    • 创建工厂类,提供了一个静态方法createXXX用来生产产品,只需要传入你想产品名称

 

 

  • 优点:
    • 将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
  • 缺点
    • 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背
    • 即开闭原则(Open Close Principle)对扩展开放,对修改关闭,程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果
    • 将会增加系统中类的个数,在一定程度上增加了系统的复杂度和理解难度,不利于系统的扩展和维护,创建简单对象就不用模式
小例子
public class AliPay implements Pay {

    @Override
    public void unifiedorder() {

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

    }
}
public interface Pay {


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

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

    }

}
public class WechatPay implements Pay {

    @Override
    public void unifiedorder() {

        System.out.println("微信支付支付 统一下单接口");
    }
}
main简单测试
        //Pay pay = SimplePayFactory.createPay("WECHAT_PAY");
        Pay pay = SimplePayFactory.createPay("ALI_PAY");

        pay.unifiedorder();

发表评论 取消回复
表情 图片 链接 代码

分享