如何动态地给一个类增加功能?

网站建设3年前发布
14 00

哈喽,大家好,我是指北君。,今天给大家介绍另一种常用的设计模式——装饰器模式。,Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.,装饰器模式(Decorator Pattern):动态的给一个对象添加额外的职责,就增加功能来说, 装饰模式相比生成子类更为灵活。,说人话:一般的,我们为了扩展一个类经常使用继承方式实现,随着扩展功能的增多,子类会很膨胀。这时候期望在不改变类对象及其类定义的情况下,为对象添加额外功能,这就是装饰器模式。,Component是一个接口或者是抽象类, 就是定义我们最核心的对象, 也就是最原始的对象。,ConcreteComponent是最核心、 最原始、 最基本的接口或抽象类的实现, 你要装饰的就是它。,一般是一个抽象类, 实现接口或者抽象方法, 它里面可不一定有抽象的方法, 在它的属性里必然有一个private变量指向Component抽象构件。,ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰类, 你要把你最核心的、 最原始的、 最基本的东西装饰成其他东西,客户端测试:,打印结果:,①装饰模式可以动态地扩展一个实现类的功能。,②装饰类和被装饰类可以独立发展, 而不会相互耦合。换句话说, Component类无须知道Decorator类, Decorator类是从外部来扩展Component类的功能, 而Decorator也不用知道具体的构件。,③装饰模式是继承关系的一个替代方案。我们看装饰类Decorator, 不管装饰多少层, 返回的对象还是Component, 实现的还是is-a的关系,①、需要扩展一个类的功能, 或给一个类增加附加功能。,②、需要动态地给一个对象增加功能, 这些功能可以再动态地撤销。

© 版权声明

相关文章