java 设计模式-装饰者模式

hl.wang

发布于 2019.08.22 15:50 阅读 2607 评论 0

什么是装饰者模式?

       装饰者模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),以透明动态的方式来动态扩展对象的功能,也是继承关系的一种代替方案。

 

 

 

为什么要使用装饰者模式?

       1、装饰者模式与继承关系的目的都是要扩展对象的功能,但是装饰者可以提供比继承更多的灵活性。

       2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

 

案例场景:

     大家肯定都去过饭店吃饭吧,大家应该都点过饮品,饮品有啤酒,可乐等等,还可以加冰,不加冰,每一种的价格也都是不一样的,这里我们就可以使用装饰者模式的方法来实现顾客点饮品的步骤,如何实现呢,下面我们来看一下代码。

 

 

      首先我们创建一个饮品,大家一看就知道这一定是一个接口,并且每一个饮品都具有名称和价格,因此接口中还具有两个属性

 

下面我们来创建可乐

 

 

 

 

 

接着我们创建顶层装饰者,主要用于对 对象的调用对其进行功能的扩展

 

 

 

 

 

       接下来如果我们对可乐进行装饰,例如加冰,那么我们该如何编写呢?两个方法中内容就是对可乐的装饰,根据具体的需求来修改这里面的内容和逻辑

 

 

 

 

 

      如果我们还想再可乐中加一点其他的饮料怎么办呢,我们这里用的啤酒做例子,方法和加冰如出一辙

 

 

 

现在装饰方法我们已经写好了,那么我么来测试一下吧

 

 

 

 

总结

 

 

 优点:

      1、装饰者模式与继承关系的目的都是要扩展对象的功能,但是装饰者模式可以提供比继承更多的灵活性。

    2、通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

缺点:

    1、这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。

    2、装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

    3、装饰模式是针对抽象组件类型编程。但是,如果你要针对具体  组件编程时,就应该重新思考你的应用架构,以及装饰者是否合适。当然也可以改变接口,增加新的公开的行为,实现“半透明”的装饰者模式。在实际项目中要做出最佳选择。