比较继承子类实现与Decorator模式实现
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 | |||||
1. Decorator模式
Decorator模式利用对象的组合动态的提供类的扩展,它是继承方式的一种替代方案。
![]() ConcreteComponent是目标类,通过ConcreteDecorator类对其进行扩展。
下面分别利用继承子类实现和Decorator模式对一个实例进行分析与比较。
2.使用继承子类
类Dir提供对指定路径的查询功能,它接受一个路径字符串和一个正则表达式字符串作为参数。路径字符串用于指定查询路径,正则表达式字符串用于提供过滤特定文件名和目录名的功能。
下面是整个实例的类结构图。
![]() Dir.java
结果:
===list all files and
directories===
.classpath
.project
a.zj
b.zj
bin
c.zj
d.zj
src
===list all *.zj files===
a.zj
b.zj
c.zj
d.zj
2.1扩展:增加统计文件和目录数目功能
类DetailDir使用两个int成员保存当前查询空间下的文件总数和目录总数。它使用继承的方式重写了getFiles方法。
DetailDir.java
结果:
.classpath
.project
a.zj
b.zj
bin
c.zj
d.zj
src
2 dirs,6 files in all
2.2扩展:增加统计文件总空间和可使用空间功能
类DetailFile使用两个int成员保存当前查询空间下的文件总空间和可使用空间。它使用继承的方式重写了getFiles方法。
DetailFile.java
结果:
.classpath
.project
a.zj
b.zj
bin
c.zj
d.zj
src
total space 70369492992 bytes,free space
34571993088 bytes
3.使用Decorator模式
使用Decorator模式可以达到同样的效果,其中类Dir可以被视为ConcreteComponent,两个子类可以被视为ConcreteDecorate。
下面是整个实例的类结构图。
![]() <<interface>> DirIface.java
具体构件Dir.java
它提供原始功能。
|





