《设计模式之禅》之装饰模式
一、装饰模式的定义装饰模式是一种笔记常见的模式,其定义如下: 装饰模式通用类说明Component抽象构件Component是一个接口或者是抽象类,就是定义我们最核心的对象。也就是最原始的对象。 注意: ConcreteComponent具体构件ConcreteComponent是最核心、最原始、最基本的接口或抽象类的实现,你要装饰的就是它。 Decorator装饰角色一般是一个抽象类,做什么用呢?实现接口或者抽象方法,它里面可不一定有抽象的方法,在它的属性里必然有一个private变量指向Component抽象构件。 具体装饰角色ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰类,你要把最核心的、最原始的、最基本的东西装饰成其他东西。 注意: 二、装饰模式应用1.装饰模式的优点a.装饰类和被装饰类可以独立发展,而不会相互耦合。换句话说,Component类无须知道Decorator类,Decorator类是从外部来扩展Component类的功能,而Decorator也不用知道具体的构件。b.装饰模式是继承关系的一个替代方案。我们看装饰类Decorator,不管装饰多少层,返回的对象还是Component,实现的还是is-a的关系。c.装饰模式可以动态地扩展一个实现类的功能。2.装饰模式的缺点如果装饰类的数量过高,会增加系统的复杂性。3.装饰模式的使用场景a.需要扩展一个类的功能,或给一个类增加附加功能。b.需要动态给一个对象增加功能,这些功能可以再动态地撤销。c.需要为一批的兄弟类进行改装或加装功能。三、最佳实践装饰模式是对继承的有力补充。你要知道继承并不是万能的,继承可以解决实际的问题,但是在项目中你要考虑诸如易维护、易扩展、易复用等,而且在一些情况下,你要是用继承就会增加很多子类,灵活性非常差,也就是说装饰模式可以替代继承,解决类膨胀问题。 代码例子:https://github.com/developers-youcong/DesignPatternPractice/tree/master/Decorator (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |