关于装饰者模式的一些理解

看了很多关于装饰者模式的帖子,讲的虽然很具体,但是例子并不复杂,导致读者不容易实际操作。这里给出我在设计较为复杂的ADT时使用的装饰者模式的写法,供各位参考。(所用语音为Java)
ADT:一个计划项类,需要具体实现3种计划项,分别为飞机计划项,火车计划项和会议计划项。
分析:计划项们在不同维度上有着不同的数据结构,如对于位置,飞机和火车是若干个地址,而对于会议则是一个地址。那么可以设计两种装饰类,第一种里面放有一个list,而第二种里面放有一个单独的location类型的变量。这样我们可以获得若干种装饰类,按维度分开。一个实际的计划项就是由不同维度上的其中一种装饰类一层层包装而成。大家可以类比做蛋糕,每一个维度就是一层蛋糕,这一层蛋糕的样式就是这个维度的各种装饰类,做蛋糕的步骤就是从每一层蛋糕的样式中选择一层。
设计:一个大的接口planningEntry,里面有所有三种计划项需要的函数;
一个基类,实现planningEntry接口,放置3种计划项的共有属性,如名称,编号;
一系列装饰类,他们继承基类,并且都拥有一个planningEntry类型的变量。这个变量是用来保证我们在包装完后能进入每一层包装来操作。他们的构造函数参数包括一个planningEntry的变量。
这就是装饰者模式下的ADT设计,实现时,先创建一个基类的对象,然后以基类为参数创建一个所需要的装饰类对象,这就完成了一次包装,以新的对象作为参数,层层包装,最后得到的那个对象就是我们需要的计划项。
代码参考:https://download.csdn.net/download/l1393452711/12479267

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值