博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用抽象工厂设计一个简单的交易模块
阅读量:4599 次
发布时间:2019-06-09

本文共 3273 字,大约阅读时间需要 10 分钟。

  

整理一下工作中用过的一些设计模式,为了尽量贴近实际应用,这里使用一个电商平台来模拟在不同模块下使用设计模式。

本文主要讲解用抽象工厂来编写交易模块的代码(订单、支付、评论):

 

如上图示,先声明三个接口IEval、IPay、IOrder,分别表示三个功能,然后将这三个功能的入口集成在抽象工厂里,然后用BussinesFactory继承抽象工厂,在其内部完成对这三个工程的创造,下面我们用代码来实现:

  • 首先声明三个接口,对应支付、订单、评价三个功能
//支付接口public interface IPay {    public boolean pay(OrderEntity orderEntity);    public boolean backPay(OrderEntity orderEntity);}//订单接口public interface IOrder {    public List
findOrder(OrderEntity orderCondition); public List
updateOrder(OrderEntity order); public OrderEntity addOrder(OrderEntity order);}//评价接口public interface IEval { public EvalEntity addEval(EvalEntity evalEntity); public EvalEntity appendEval(EvalEntity evalEntity);}

 

  •  然后对这三个接口进行具体的实现
//评价的实现类public class EvalService implements IEval {    @Override    public EvalEntity addEval(EvalEntity evalEntity) {     System.out.println("完成了一次评价");        return null;    }    @Override    public EvalEntity appendEval(EvalEntity evalEntity) {        return null;    }}//订单的实现类public class OrderService implements IOrder {    @Override    public List
findOrder(OrderEntity orderCondition) { return null; } @Override public List
updateOrder(OrderEntity order) { return null;} @Override public OrderEntity addOrder(OrderEntity order) { System.out.println("创建了一个订单"); return null; }}public class PayService implements IPay { private String payType = ""; //这里使用带参的构造,传入哪种实体类,就决定当前对象的支付形态 //当然后续我们可以改造这个类,实现IPay接口,实现支付的解耦,使用多态的方式来进行支付的实现 public PayService(AlipayModel alipayModel) { payType = alipayModel.PAY_TYPE; } public PayService(WePayModel wePayModel) { payType = wePayModel.PAY_TYPE; } public PayService(ApplePayModel applePayModel) { payType = applePayModel.PAY_TYPE; } @Override public boolean pay(OrderEntity orderEntity) { System.out.println("使用了"+payType+"支付!"); return false; } @Override public boolean backPay(OrderEntity orderEntity) { return false; }}

 

  • 编写抽象工厂和具体的工厂对象
public abstract class AbstractFactory {    public abstract IEval createEval();    public abstract IOrder createOrder();    public abstract IPay createPay(PayModel payModel);}public class BussinesFactory extends AbstractFactory {    @Override    public IEval createEval() {        return new EvalService();    }    @Override    public IOrder createOrder() { return new OrderService(); }    @Override    public IPay createPay(PayModel payModel) {        if(payModel instanceof AlipayModel){            return new PayService((AlipayModel)payModel);        }        if(payModel instanceof WePayModel){            return new PayService((WePayModel)payModel);        }        return new PayService((ApplePayModel)payModel);    }}

 

  • 编写测试类
public static void main(String[] args) {    AbstractFactory factory = new BussinesFactory();    AlipayModel alipayModel = new AlipayModel();    factory.createOrder().addOrder(null);    IPay payService = factory.createPay(alipayModel);    payService.pay(null);    factory.createEval().addEval(null);}

 

执行之后可以看到以下输出结果:

创建了一个订单

使用了阿里支付!
完成了一次评价

以上就完成了一个很简单的抽象工程,各个模块之间只关注model的传递,完全解耦,比如后续还需要添加一个express功能,也不会对已有的功能代码产生影响。

 

 

转载于:https://www.cnblogs.com/coding88/p/9147850.html

你可能感兴趣的文章
Android 状态栏通知Notification、NotificationManager详解
查看>>
如何在Google Map中处理大量标记(ASP.NET)(转)
查看>>
Sublime Text 3中使用正则表达式删除空行
查看>>
UIApplicationDelegate协议
查看>>
再谈iOS 7的手势滑动返回功能
查看>>
Jmeter测试dubbo接口填坑
查看>>
python小练——找出指定目录下小于指定字节的文件,输出到文本文件
查看>>
渐渐磨砺--16年11月封闭总结
查看>>
[zz]GDB调试精粹及使用实例
查看>>
数据库的创建和删除
查看>>
【消息队列MQ】各类MQ比较
查看>>
最简单的三层实例【插入据
查看>>
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
ZOJ 1204 一个集合能组成多少个等式
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
开始学习iOS开发
查看>>
从int 3探索Windows应用程序调试原理
查看>>