装饰模式
装饰模式,就是可以动态的给一个对象添加一些额外的职责,就增加新功能来说,装饰模式比生成子类的方式更加灵活。其实可以把装饰模式理解为给一个人穿衣服的过程,给人穿衣服,所以首先得需要一个人,其次就得需要衣服了,对应到装饰模式当中,就是首先得需要一个被装饰得主体,接着就是需要装饰了。有可能并不是一个人,所以可以选择性的抽出一个人的接口对象,而衣服不可能是只穿一件衣服,所以就需要一个服装基类,然后就是实现各式各样具体的服装了(如:T恤,裤子,夹克……)接下来就是装饰的过程,首先需要实例化出一个人的对象,然后需要将这个对象设置到服装基类中作为装饰主题,接着给人穿什么衣服,就依个人喜好而定了_。代码实现如下(参考《大话设计模式》):
装饰过程:
这里,开始觉得用生成子类的方法也可以实现该功能,增加一个功能,在这里就是具体增加一个服装,就多一个服装基类的子类,但是如果这样做,就需要实例化完所有对象之后,一个一个运行show方法,这样本该在内部组装好西,最后只需show一次即可的东西,最后确实在外部组装完成,这样感觉不太好,就像穿衣服一样,不管你今天穿什么衣服,都应该自己起床穿好,最后其他人看到的只是你穿好衣服的样子,而不是你拿着衣服,当着别人面一件一件穿好。
其实,装饰模式通俗来讲,就是有一个主题,然后一层一层往这个主题上“套”东西。