装饰者模式通过使用继承,能够将对象一层一层地包装起来。
1,Person是被装饰的对象,装饰者模式的类图中,所有的类都继承自Person类。Person类有一个show方法,用来展示Person对象哪些服饰装饰了。通过继承,所有的类都有show方法,因此当人穿上了某种服饰之后,就可能调用该服饰的show方法展示出来。当没有任何服饰装饰人时,执行show方法就表示最初始的人。
2,抽象的服饰类继承自Person类,尽管从自然概念上讲,服饰并不是人。但这里还是使用了继承。原因之一是,这样抽象的服饰类就有了show方法,从而使得各个具体的服饰类也有了show方法,当使用某个具体的服饰去装饰对象时,就可以使用该服饰的show方法展示了。
3,尽管抽象的服饰类继承了Person类,但是它里面还有一个Person类的属性,这个属性就是用来给各个具体的服饰类去指明它要装饰哪个对象。由于该属性是Person类型的,因此A类服饰可以装饰B类服饰,B类服饰可以装饰C类服饰,……最终N类服饰装了Person对象(反过来看)。
4,由于每个具体的服饰都从父类那里继承了show方法,因此在show方法里,每个具体的服饰都有一个带有个人特性的装饰,然后再调用父类的装饰(即所谓的一层一层包装起来)。