简单的讲述简单工厂模式:简单工厂是静态方法,可通过类名直接调用,而且只需要传入简单的参数即可。
核心组成: * 1.Factory:工厂类,简单工厂模式,它负责实现创建所有实例的内部逻辑 * 2.IProduct: 抽象产品类,简单工厂模式所创建的所有对象的父类 * 描述所有实例所公共的接口 * 3.Product: 具体产品类,是简单工厂的创建目标实现步骤: * 创建抽象产品类:里面有抽象方法,由具体的产品类去实现 * 创建具体产品类: 继承了他们的父类,并实现具体的方法 * 创建工厂类: 提供一个静态方法createXX用来生产产品,只需要传入你想要产品名称
简单工厂模式的优点:将对象的创建和对象本身业务处理分离可以降低系统的耦合度。
缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违反了开闭原则 。
下面我用一个微信支付,支付宝支付的例子来进行简单工厂模式的实现。
抽象产品类,所有实例共有的公共接口:
/** * 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:10 * @Description: 微信支付实现类 */ public class WechatPay implements Pay{ @Override public void unifiedorder() { //TODO 微信支付的业务逻辑 System.out.println("微信支付,统一下单"); } }
支付宝支付的业务逻辑类:
/** * 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("支付宝支付,统一下单。"); } }
简单工厂类:
public class SimpleFactory { /** * 根据参数返回相应的支付对象 * @param payType * @return */ public static Pay createPay(String payType){ // 空值判断 返回空或者自己抛出异常 if(payType == null){ return null; } if (payType.equalsIgnoreCase("WECHAT_PAY")){ return new WechatPay(); } else if (payType.equalsIgnoreCase("ALI_PAY")){ return new AliPay(); } // 想扩展更多的支付方式就继续编写更多的支付实现类并修改工厂 return null; } }
简单工厂的测试类:
/** * Created with IntelliJ IDEA. * * @Author: chenxiky * @Date: 2022/03/20/14:19 * @Description: 简单工厂类 */ public class SimpleFactoryMain { public static void main(String[] args) { // 静态方法不需要new 写法一 SimpleFactory.createPay("WECHAT_PAY").unifiedorder(); // 静态方法不需要new 写法二 Pay ali_pay = SimpleFactory.createPay("ALI_PAY"); ali_pay.unifiedorder(); } }