装饰者模式的应用示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
装饰者模式的应⽤⽰例
装饰者模式的作⽤
装饰者模式可以复⽤系统中的各个单⼀功能组件,在运⾏时,可以将这些组件进⾏叠加,构造⼀个‘超级对象’,使得具有这些组件的功能。
装饰者模式的应⽤
举个⽤户下单的业务场景。
原有业务:⽤户下单,系统涉及到调⽤第三⽅接⼝,即下单接⼝。
因此,当⽤户下单时,系统只需调⽤第三⽅接⼝来我完成下单操作即可。
⽬前系统中有:1)下单接⼝OrderService;
2)下单接⼝的具体实现OrderServiceImpl,这个实现类主要是处理调⽤第三⽅接⼝来完成下单操作;
新增业务:系统中为了能够对⽤户下的订单进⾏统计分析,需要将⽤户下的单在本地备份⼀份。
因此,系统在处理⽤户下单时,需要进⾏两步:①调⽤第三⽅下单接⼝使得下单成功;②下单成功后,将订单信息保存到本地数据库中。
为了实现这个新增业务,可以使⽤装饰者模式。
基于系统中有的接⼝及类,为了满⾜新增业务需求,需要增加:
1)实体类Order,为添加到数据库的订单实体
2)dao层saveOrder
类图:
代码:
1)OrderServiceImpl:调⽤第三⽅处理⽤户下单操作
public class OrderServiceImpl implements OrderService {
public boolean addOrder(Order order) {
System.out.println("调⽤第三⽅接⼝正在下单...");
System.out.println("下单者:"+order.getBuyer());
return true;
}
}
2)OrderServiceDecorator:装饰者
public abstract class OrderServiceDecorator implements OrderService{
OrderService orderService;
public OrderServiceDecorator(OrderService orderService){
this.orderService = orderService;
}
}
3)SaveOrderToDB:具体装饰者,当⽤户下单成功后,将订单保存到本地db
public class SaveOrderToDB extends OrderServiceDecorator {
public SaveOrderToDB(OrderService orderService) {
super(orderService);
}
public boolean addOrder(Order order) {
orderService.addOrder(order);
System.out.println("将订单保存到本地db中...");
return true;
}
}
测试类:
public class OrderDecoratorTest {
public static void main(String[] args) {
Order order = new Order();
order.setBuyer("wmmang");
OrderService os = new SaveOrderToDB(new OrderServiceImpl());
os.addOrder(order);
}
}
打印结果:。