最新消息

java装饰器模式

设计模式 金牌剑客 7610℃ 0评论

定义

装饰器模式又称保证模式,是动态地扩展对象的功能,是继承关系的一个替代方案。

类图

decorator
在装饰器中的角色有:

抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。

具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。

装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。

具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。

java源代码

Component.java

public interface Component {
	public void operator();
}

ConcreteComponent.java

public class ConcreteComponent implements Component {
	public void operator() {
		System.out.println("ConcreteComponent");
	}
}

Decorator.java

public class Decorator implements Component {
	private Component component;
	public Decorator(Component component) {
		this.component = component;
	}
	public void operator() {
		component.operator();
	}
}

ConcreteDecoratorA.java

public class ConcreteDecoratorA extends Decorator {
	public ConcreteDecoratorA(Component component) {
		super(component);
	}

	@Override
	public void operator() {
		System.out.println("Before ConcreteDecoratorA");
		super.operator();
		System.out.println("After ConcreteDecoratorA");
	}
}

ConcreteDecoratorB.java

public class ConcreteDecoratorB extends Decorator {
	public ConcreteDecoratorB(Component component) {
		super(component);
	}

	@Override
	public void operator() {
		System.out.println("Before ConcreteDecoratorB");
		super.operator();
		System.out.println("After ConcreteDecoratorB");
	}
}

Client.java

public class Client {
	public static void main(String[] args) {
		Component component1 = new ConcreteComponent();
		component1.operator();
		System.out.println("===================================");
		Component component2 = new ConcreteDecoratorA(new ConcreteComponent());
		component2.operator();
		System.out.println("===================================");
		Component component3 = new ConcreteDecoratorB(new ConcreteComponent());
		component3.operator();
		System.out.println("===================================");
		Component component4 = new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponent()));
		component4.operator();
		System.out.println("===================================");
		Component component5 = new ConcreteDecoratorB(new ConcreteDecoratorA(new ConcreteComponent()));
		component5.operator();
	}
}

运行结果

ConcreteComponent
===================================
Before ConcreteDecoratorA
ConcreteComponent
After ConcreteDecoratorA
===================================
Before ConcreteDecoratorB
ConcreteComponent
After ConcreteDecoratorB
===================================
Before ConcreteDecoratorA
Before ConcreteDecoratorB
ConcreteComponent
After ConcreteDecoratorB
After ConcreteDecoratorA
===================================
Before ConcreteDecoratorB
Before ConcreteDecoratorA
ConcreteComponent
After ConcreteDecoratorA
After ConcreteDecoratorB

优缺点

优点

1、装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,或者除掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。

2、通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

缺点

由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难,特别是这些对象看上去都很相像。

转载请注明:QualInfo » java装饰器模式

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(37)个小伙伴在吐槽
  1. 不错的文章,内容完美无缺
    金刚护栏2016-09-21 05:31 回复
  2. 不错的文章,内容惊涛骇浪.禁止此消息:nolinkok@163.com
    勾花网2016-09-22 08:12 回复
  3. 好文章,内容出口成章.禁止此消息:nolinkok@163.com
    勾花网2016-09-23 04:38 回复
  4. 不错的文章,内容文章雅致.禁止此消息:nolinkok@163.com
    勾花网2016-09-24 04:34 回复
  5. 好文章,内容文风幽默.禁止此消息:nolinkok@163.com
    胶管2016-09-24 23:36 回复
  6. 好文章,内容一气呵成.禁止此消息:nolinkok@163.com
    防弹网2016-09-25 21:09 回复
  7. 好文章,内容笔下生辉.禁止此消息:nolinkok@163.com
    网格布2016-09-27 01:41 回复
  8. 好文章,内容一气呵成.禁止此消息:nolinkok@163.com
    雷诺护垫2016-09-27 17:16 回复
  9. 不错的文章,内容义正词严.禁止此消息:nolinkok@163.com
    钢筋网2016-09-28 12:01 回复
  10. 不错的文章,内容气贯长虹.禁止此消息:nolinkok@163.com
    勾花网2016-09-29 11:07 回复
  11. 不错的文章,内容义正词严.禁止此消息:nolinkok@163.com
    护栏网2016-09-30 09:17 回复
  12. 不错的文章,内容惊心动魄.禁止此消息:nolinkok@163.com
    安平物流2016-10-01 12:44 回复
  13. 不错的文章,内容惊涛骇浪.禁止此消息:nolinkok@163.com
    桥梁顶升2016-10-02 16:01 回复
  14. 好文章,内容无懈可击.禁止此消息:nolinkok@163.com
  15. 好文章,内容排山倒海.禁止此消息:nolinkok@163.com
    格宾网2016-10-04 21:23 回复
  16. 好文章,内容栩栩如生.禁止此消息:nolinkok@163.com
    不锈钢网2016-10-09 06:08 回复
  17. 不错的文章,内容远见卓识.禁止此消息:nolinkok@163.com
    边坡防护网2016-10-10 07:12 回复
  18. 好文章,内容无与伦比.禁止此消息:nolinkok@163.com
    钢板网2016-10-11 09:49 回复
  19. 不错的文章,内容横扫千军.禁止此消息:nolinkok@163.com
    防风抑尘网2016-10-12 22:18 回复
  20. 好文章,内容气吞山河.禁止此消息:nolinkok@163.com
    钢格板2016-10-14 04:19 回复
  21. 不错的文章,内容惊天动地.禁止此消息:nolinkok@163.com
    衡水人才网2016-10-15 08:22 回复
  22. 不错的文章,内容欢风华丽.禁止此消息:nolinkok@163.com
    不锈钢网2016-10-15 08:23 回复
  23. 不错的文章,内容雷霆万钧.禁止此消息:nolinkok@163.com
    网格布2016-10-18 17:00 回复
  24. 好文章,内容一针见血.禁止此消息:nolinkok@163.com
    网格布2016-10-18 17:01 回复
  25. 不错的文章,内容无与伦比.禁止此消息:nolinkok@163.com
    止水带2016-10-20 10:03 回复
  26. 不错的文章,内容才思敏捷.禁止此消息:nolinkok@163.com
    pvc护栏2016-10-20 10:04 回复
  27. 好文章,内容妙趣横生.禁止此消息:nolinkok@163.com
    压滤机2016-10-22 06:57 回复
  28. 不错的文章,内容淋漓尽致.禁止此消息:nolinkok@163.com
    隔音屏障2016-10-22 06:57 回复
  29. 好文章,内容才思敏捷.禁止此消息:nolinkok@163.com
    火柴胶2016-10-25 09:31 回复
  30. 好文章,内容气吞山河.禁止此消息:nolinkok@163.com
    边坡防护网2016-10-27 03:03 回复
  31. 好文章,内容观念明确.禁止此消息:nolinkok@163.com
    防风抑尘网2016-10-27 03:03 回复
  32. 不错的文章,内容出神入化.禁止此消息:nolinkok@163.com
    压滤机2016-10-28 19:47 回复
  33. 好文章,内容龙飞凤舞.禁止此消息:nolinkok@163.com
    勾花网2016-10-28 19:48 回复
  34. 好文章,内容才思敏捷.禁止此消息:nolinkok@163.com
    公路声屏障2016-11-01 07:27 回复
  35. 好文章,内容气吞山河.禁止此消息:nolinkok@163.com
    不锈钢窗纱2016-11-01 07:28 回复
  36. 不错的文章,内容惊天动地.禁止此消息:nolinkok@163.com
    道路标线2016-11-02 18:37 回复
  37. 不错的文章,内容气贯长虹.禁止此消息:nolinkok@163.com
    安平物流2016-11-02 18:38 回复