1700448186
编写高质量代码:改善Java程序的151个建议 建议107:使用反射增加装饰模式的普适性
1700448187
1700448188
装饰模式(Decorator Pattern)的定义是“动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比于生成子类更为灵活”,不过,使用Java的动态代理也可以实现装饰模式的效果,而且其灵活性、适应性都会更强。
1700448189
1700448190
我们以卡通片《猫和老鼠》(《Tom and Jerry》)为例,看看如何包装小Jerry让它更强大。首先定义Jerry的类:老鼠(Rat类),代码如下;
1700448191
1700448192
interface Animal{
1700448193
1700448194
public void doStuff();
1700448195
1700448196
}
1700448197
1700448198
//老鼠是一种动物
1700448199
1700448200
class Rat implements Animal{
1700448201
1700448202
public void doStuff(){
1700448203
1700448204
System.out.println(“Jerry will play with Tom.”);
1700448205
1700448206
}
1700448207
1700448208
}
1700448209
1700448210
接下来我们要给Jerry增加一些能力,比如飞行、钻地等能力,当然使用类继承也很容易实现,但我们这里只是临时地为Rat类增加这些能力,使用装饰模式更符合此处的场景。首先定义装饰类,代码如下:
1700448211
1700448212
//定义某种能力
1700448213
1700448214
interface Feature{
1700448215
1700448216
//加载特性
1700448217
1700448218
public void load();
1700448219
1700448220
}
1700448221
1700448222
//飞行能力
1700448223
1700448224
class FlyFeature implements Feature{
1700448225
1700448226
public void load(){
1700448227
1700448228
System.out.println(“增加一只翅膀……”);
1700448229
1700448230
}
1700448231
1700448232
}
1700448233
1700448234
//钻地能力
[
上一页 ]
[ :1.700448185e+09 ]
[
下一页 ]