持之以恒的去坚持做一件事儿,现在在凌晨的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();
}
}