用代理模式做具体任务的分发(代理模式的简单应用)

背景:
最近的工作是在对接飞鹅打印机,对接打印机厂家的开发平台,后台调用厂家的打印机接口(添加、删除、打印等),然后进行小票的打印,后续需要对接多个品牌的打印机

问题:
不保证商家只有一台和一个品牌的打印机,如果能做一个模板,上层直接调用一个方法,就能兼容多种打印机,我们只需关注各个品牌打印机的接口编写

实现:
四个主要类:

  1. 商家打印机实体类(表示商家绑定的打印机)
  2. 打印机实体类(负责打印机的打印,具体品牌的打印机继承于该类)
  3. 打印机管理者类(包含具体品牌的打印机管理者,负责打印机的管理和使用,代理管理者,负责分发打印机任务给具体品牌的打印机管理者)
  4. 打印机品牌枚举(包含所有打印机品牌的名称)

类说明:

  1. 商家打印机实体:具有商家id、打印机品牌,打印机SN码、打印机其他参数属性
  2. 打印机实体:具有打印小票方法,受保护的(protected)发送请求方法
  3. 打印机管理者:具有打印机的打印、添加、删除方法
  4. 打印机代理管理者:具有一个私有的打印机管理者集合,在类加载的时候,遍历打印机品牌枚举,利用反射机制初始化了所有具体品牌的打印机管理者

调用步骤:
打印小票:

  1. 打印机服务传递订单详情和商家id给打印机代理管理者
  2. 代理管理者根据商家id,获取商家绑定的打印机列表(商家打印机实体类),并根据各台打印机的品牌,分发给具体的品牌打印机管理者,并传递订单和打印机SN码
  3. 具体管理者将订单格式化成小票,获取一台打印机,并设置SN码,然后调用打印机的打印方法

添加打印机:

  1. 打印机服务传递将添加打印机所需参数(具有品牌参数)传递给打印机代理管理者
  2. 代理管理者跟着打印机品牌,将添加任务分发给具体打印机管理者
  3. 具体管理者构建添加参数,根据打印机品牌,利用反射机制获取一天对应品牌的打印机,然后调用打印机的发送请求方法
    因为该方法是protected权限,上层只能用反射机制来调用,尚未找到比较合适的解决办法
    如果换成public权限,我觉得有点不安全
    如果在打印机类里实现添加方法,我觉得不符合逻辑,打印机不可能去添加一台打印机,而是被添加的
    如果在管理者上实现发送请求的方法,我觉得管理者不应该关注打印机是怎么发送请求的

总结:

  1. 该方法因为有个代理管理者做中间层,完成了对打印机品牌的判断和任务的分发,具体管理者接收到任务,具体管理者管理着具体品牌的打印机,直接调用打印机的方法即可
  2. 我们后续对接其他品牌时,只需将品牌名称添加到品牌枚举类,和只需关注具体管理者的任务逻辑,和打印机的接口实现即可
  3. 因为服务层并不是直接跟具体管理者耦合,代理管理者使两者之间进行了解耦,代理管理者会自动根据已经对接的品牌创建对应管理者,并获取商家的绑定打印机,然后会根据打印机品牌将任务分发给对应具体管理者
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值