网站单向外链推广工具,wordpress 页面伪静态页面,做外贸平台还是网站,海北营销网站建设公司Decorator#xff08;装饰#xff09;–对象结构型模式
一、意图 1.动态地给一个对象添加一些额外的职责。就增加功能来说#xff0c;Decorator模式相比生成子类更为灵活。
二、动机 1.在某些情况下我们可能会“过度地使用继承来扩展对象的功能”#xff0c; 由于继承为类…Decorator装饰–对象结构型模式
一、意图 1.动态地给一个对象添加一些额外的职责。就增加功能来说Decorator模式相比生成子类更为灵活。
二、动机 1.在某些情况下我们可能会“过度地使用继承来扩展对象的功能” 由于继承为类型引入的静态特质使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多)各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。 2.如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能 扩展变化”所导致的影响将为最低?
三、适用性 1.在不影响其他对象的情况下以动态、透明的方式给单个对象添加职责。 2.处理那些可以撤销的职责。 3.打给你不能采用生成子类的方式进行扩充时。一种情况是可能有大量独立的扩展为支持每一种组合将产生大量的子类使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏或类定义不能用于生成子类。
四、结构
五、效果 1.比静态继承更灵活。 2.避免在层次结构高层的类有太多的特征。 3.Decorator与Component不一样。 4.有许多小对象。
六、实现 1.接口的一致性。 2.省略抽象的Decorator类。 3.保持Component类的简单性 4.改变对象外壳Decorator与改变对象内核Strategy
七、要点总结 1.通过采用组合而非继承的手法Decorator模式实现了在运行时动态扩展对象功能的能力而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题”。 2.Decorator类在接口上表现为is-a Component的继承关系即 Decorator类继承了Component类所具有的接口。但在实现上又 表现为has-a Component的组合关系即Decorator类又使用了另外一个Component类。 3.Decorator模式的目的并非解决“多子类衍生的多继承”问题Decorator模式应用的要点在于解决“主体类在多个方向上的扩展功能”——是为“装饰”的含义。
八、相关模式 Adapter模式Decorator模式不同于Adapter模式因为装饰仅改变对象的职责而不该变它的接口而适配器将给对象一个全新的接口。 Component模式可以将装饰视为一个退化的、仅有一个组件的组合。然而装饰仅给对象添加一些额外的职责——它的目的不在于对象聚集。 Strategy模式用一个装饰你可以改变对象的外表而Strategy模式使得不可以改变对象的内核。这是改变对象的两种途径。
九、举例说明 装饰模式功能名字很能解释它的行为比如给手机贴膜也可以给手机加个外壳也可以随时换模添加和减少功能很方便等等。
本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解