装饰模式(Decorator)-山下的石雕厂
2015-12-02 20:02
417 查看
装饰模式:是对一个类进行各种功能的丰富,使用Decorator模式扩充类的功能会比用子类生成的方式更加的灵活。
装饰者与被装饰者拥有共同的超类。
类图:
我家有座山,山下有座石雕厂,石雕厂有打磨石狮子的机器
抽象构建角色(被装饰者):石雕厂Carved类
具体构建角色(被装饰者的初始状态):雕刻石狮子LionCarved
装饰角色(持有构件的实例):机器 Machine
装饰类:CarvedHead CarvedBody CarvedTail
Carved类
LionCarved类
Machine类
CarvedHead类
CarvedBody类
CarvedTail类
测试Test类
运行结果如下:
装饰者与被装饰者拥有共同的超类。
类图:
我家有座山,山下有座石雕厂,石雕厂有打磨石狮子的机器
抽象构建角色(被装饰者):石雕厂Carved类
具体构建角色(被装饰者的初始状态):雕刻石狮子LionCarved
装饰角色(持有构件的实例):机器 Machine
装饰类:CarvedHead CarvedBody CarvedTail
Carved类
package decorator2; public abstract class Carved { public abstract String toCarved(); }
LionCarved类
package decorator2; public class LionCarved extends Carved{ public String toCarved(){ return "开始雕刻石狮子"; } }
Machine类
package decorator2; public abstract class Machine extends Carved{ }
CarvedHead类
package decorator2; public class CarvedHead extends Machine{ Carved carved; public CarvedHead(Carved carved){ this.carved = carved; } public String toCarved(){ return "先要雕刻头部"; } }
CarvedBody类
public class CarvedBody extends Machine{ Carved carved; public CarvedBody(Carved carved) { this.carved = carved; } public String toCarved(){ return "然后雕刻身体"; } }
CarvedTail类
package decorator2; public class CarvedTail extends Carved{ Carved carved; public CarvedTail(Carved carved){ this.carved = carved; } public String toCarved(){ return "最后雕刻尾巴"; } }
测试Test类
package decorator2; public class Test { public static void main(String args[]){ Carved carved = new LionCarved(); System.out.println(carved.toCarved()); CarvedHead carvedHead = new CarvedHead(carved); System.out.println(carvedHead.toCarved()); CarvedBody carvedBody = new CarvedBody(carved); System.out.println(carvedBody.toCarved()); CarvedTail carvedTail = new CarvedTail(carved); System.out.println(carvedTail.toCarved()); } }
运行结果如下:
相关文章推荐
- 寒霜引擎(镜之边缘:催化剂)中的屏幕空间反射
- div自动拉伸
- poi解析上传的Excel xlsx 保存到Oracle 趁还没忘记,留下
- lightoj1118 Incredible Molecules
- 偶数求和
- 【计算机视觉菜鸟入门】之各种大牛配置教程
- 杭电校赛(质方数)
- 黑马程序员--MAP集合
- vim编辑器 保存命令
- 带梯度效果的圆形进度View
- weka和matlab完成完整分类实验
- coderforce 483A Counterexample
- POJ3186 Treats for the Cows DP
- 给于 dom 解析的跳转框架
- 文章标题
- hibernate连接数据库,进行操作的步骤
- PCL—低层次视觉—点云分割(超体聚类)
- DataGrid( 数据表格) 组件[2]
- FMDB简单介绍
- 1046. Shortest Distance (20)