标签:img 创建 优点 基础上 orb new 职责 int 关闭
一、百科
概述: 23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
特点:
适用环境:
1.抽象构件角色(Component):给出一个抽象接口,以规范准备接收附加责任的对象。
2.具体构件角色(ConcreteComponent):定义将要接收附加责任的类(Component接口实现类)。
3.装饰角色(Decorator):持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口。
4.具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任,即在不改变原类基础上增加新的功能
二、Demo
1.抽象构件
package com.design.decorator; /** * 抽象构件角色(Component):给出一个抽象接口,以规范准备接收附加责任的对象。 * 具体构件角色(ConcreteComponent):定义将要接收附加责任的类(Component接口实现类)。 * 装饰角色(Decorator):持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口。 * 具体装饰角色(ConcreteDecorator):负责给构件对象“贴上”附加的责任,即在不改变原类基础上增加新的功能 * * 抽象构件角色 */ public interface Component { public void toDoSth(); }
2.具体构件
package com.design.decorator; /** * 具体构件角色 * 实现Component接口 */ public class ConcreteComponent implements Component { @Override public void toDoSth() { System.out.println("装饰器模式。。。。。"); } }
3.装饰器
package com.design.decorator; /** * 装饰角色: * 实现Component接口 * 同时拥有Component的引用,也可将该类设计成抽象类; * 装饰器不必改变原类文件和使用继承的情况下,使用Java组合代替继承, * 动态的扩展一个对象的功能 */ public class Decorator implements Component { private Component component; public Decorator(Component component) { this.component = component; } @Override public void toDoSth() { component.toDoSth(); } }
4.具体装饰角色 ConcreteDecoratorA、 ConcreteDecoratorB
package com.design.decorator; /** * 装饰器实现类 * */ public class ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component component) { super(component); } public void toDoSth() { super.toDoSth(); this.newFunA(); } private void newFunA() { System.out.println("新功能A"); } }
package com.design.decorator; /** * 装饰器实现类 * */ public class ConcreteDecoratorB extends Decorator { public ConcreteDecoratorB(Component component) { super(component); } public void toDoSth() { super.toDoSth(); this.newFunB(); } private void newFunB() { System.out.println("新功能B"); } }
5.测试类 TestDecorator
package com.design.decorator; //测试类 TestDecorator public class TestDecorator { public static void main(String[] args) { Component component = new ConcreteComponent(); Component component1 = new ConcreteDecoratorA(component); component1.toDoSth(); Component component2 = new ConcreteDecoratorB(component1); component2.toDoSth(); } }
6.结果:
三、总结
优点:
标签:img 创建 优点 基础上 orb new 职责 int 关闭
原文地址:http://www.cnblogs.com/quyanhui/p/7459507.html