一、设计模式-装饰模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
今天我将详细介绍装饰设计模式。装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。UML结构图如下:
-
Component(抽象构件):它是装饰类和具体构件的公共父类;
-
ConcreteComponent(具体构件):具它是抽象构件对象的子类,用来定义具体的构件对象;
-
Decorator(抽象装饰类):进继承抽象构件,用于给具体的构件添加一些新的职责;
-
ConcreteDecoraror(具体装饰类):实现了抽象装饰类,它负责向构件添加新的职责;
二、应用场景
业务场景:现我们现在模拟这样一个场景,我们点了一杯奶茶,然后给奶茶中加了冰块,加了珍珠,最后我们还想再给加点红豆,这里加红豆就使用了装饰者。
我们下来创建一个奶茶的抽象类,相当于Component
我们再来创建要给奶茶的具体子类,相当于ConcreteComponent
接下来创建一个装饰类,相当于Decorator
创建装饰类的子类,添加珍珠,相当于ConcreteDecorator
创建装饰者的子类,添加红豆,相当于ConcreteDecorator
测试与结果
三、引入该设计模式后对系统架构和代码结构带来了哪些好处
由上述应用场景可以知道,引入此种设计模式后,在强化类的某个方法时,不需要对类做过多的修改,是一种为了已有的功能动态的添加更多功能的一种方式。把类中的装饰功能从类中搬移去除,极大地简化了原有的类。
四、解释其中用到的多态机制
我们在Decorator接口中构造函数需要一个milkyTea对象,在调用继承了Decorator接口MilkyTeaADetector和MilkyTeaBDetector构造方法中传入的是一个MilkyTeA和MilkyTeB的对象,多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。这里传入MilkyTeA和MilkyTeB的对象后就会按照对象的特性进行运作。是非常典型的多态。
五、说明模块抽象封装的方法
模块将会抽象封装成以下几个部分:
-
Component(抽象构件):它是装饰类和具体构件的公共父类;
-
ConcreteComponent(具体构件):具它是抽象构件对象的子类,用来定义具体的构件对象;
-
Decorator(抽象装饰类):进继承抽象构件,用于给具体的构件添加一些新的职责;
-
ConcreteDecoraror(具体装饰类):实现了抽象装饰类,它负责向构件添加新的职责;
六、分析各个模块的内聚度和模块之间的耦合度
模块之间的耦合度较低,内聚度较高, 可以知道,若在Decorator中定义的是ConcreteComponent类,则模块之间的耦合度会比较高,现在用多态的方式定义Component接口,模块之间的耦合度显而易见地降低了。