一层继承一层。装饰模式是为已有功能动态地添加更多功能的一种方式。关键词是添加更多功能。
当系统需要新功能时,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要功能,而这些代码仅在特定情况下才需要。装饰模式把每个要装饰的功能放在单独的类,当执行时客户代码可以有选择,按顺序使用装饰功能包装对象。
他的好处是有效地把类的核心职责和装饰功能区分开,而且除去相关类的重复装饰逻辑。
人类有个show的函数。服饰类继承人类,并拥有一个人类,装饰就是set人类,有一个覆盖的show 函数里面调用自身人类的show。具体类的西裤,大衣类都有继承服饰类,覆盖show 函数,里面是装饰逻辑和调用父类的show。客户端首先创建人类,然后按顺序西裤set 人,大衣set前面的西裤,最后大衣show。这样就会先做了穿大衣的逻辑,然后调用服饰类的show,这个show调用了set进去的西裤的show,所以继续做西裤的逻辑,然后重复迭代,调用人类的show逻辑。
这样的确一层叠一层,也可以按顺序。感觉就是一直调用set进来的类的同一个函数。继承是为了可以set的使用用泛型,以后更动态的添加新类,不影响其他的装饰类。
应用:加密数据,过滤词汇都可以是数据持久化的装饰功能,保证装饰类之间彼此独立,这样就可以任意顺序组合。