第八章 装饰模式 博客分类: Java基础Java设计模式 装饰模式java模式
程序员文章站
2024-03-24 21:21:52
...
1.装饰模式
动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
动态地扩展一个对象的功能,而不需要改变原始类代码的一种成熟模式。
在装饰模式中,“具体组件”类和“具体装饰”类是该模式中的最重要的两个角色。
2装饰模式-结构
装饰模式的结构中包括四种角色:
- 抽象组件(Component)
- 具体组件(ConcreteComponent)
- 装饰(Decorator)
- 具体装饰(ConcreteDecotator)
装饰模式的核心就是在于装饰的构造方法关联了抽象组件的引用,而具体组件和具体装饰都是属于抽象组件的子类,所以在构造具体装饰的时候,可以把不同的具体装饰作为引用来构造自己,即实现责任的扩充。
3装饰模式-场景描述
麻雀可以在飞100米的基础上连续飞50米
4装饰模式-场景分析
- 抽象组件
鸟 Bird - 具体组件
麻雀 Sparrow - 装饰
装饰 Decorator - 具体装饰
具体装饰 SparrowDecorator
5装饰模式-代码实现
package patterns.decorator; /** * 抽象组件 * @author Administrator * */ public abstract class Bird { public abstract double fly(); } package patterns.decorator; /** * 具体组件 * @author Administrator * */ public class Sparrow extends Bird { @Override public double fly() { return 100; } } package patterns.decorator; /** * 装饰角色 * @author Administrator * */ public abstract class Decorator extends Bird { public Bird bird; public Decorator(Bird bird) { this.bird = bird; } } package patterns.decorator; /** * 具体装饰角色 * @author Administrator * */ public class SparrowDecorator extends Decorator { public double DISTANCE = 50; public SparrowDecorator(Bird bird) { super(bird); } @Override public double fly() { return bird.fly()+DISTANCE; } } package patterns.decorator; public class Client { public static void main(String[] args) { Bird bird = new Sparrow(); System.out.println(bird.fly()); Decorator decorator = new SparrowDecorator(bird); System.out.println(decorator.fly()); Decorator decorator2 = new SparrowDecorator(decorator); System.out.println(decorator2.fly()); } }
上一篇: css3中的动画效果
推荐阅读
-
第五章 工厂方法模式 博客分类: Java设计模式
-
第七章 策略模式 博客分类: Java设计模式 模式策略模式
-
第八章 装饰模式 博客分类: Java基础Java设计模式 装饰模式java模式
-
第三章 单例模式 博客分类: J2EEJava基础Java设计模式
-
第二章 面向对象的几个基本原则 博客分类: J2EEJava设计模式设计Java基础
-
第七章 策略模式 博客分类: Java设计模式 模式策略模式
-
第二章 面向对象的几个基本原则 博客分类: J2EEJava设计模式设计Java基础
-
第五章 工厂方法模式 博客分类: Java设计模式
-
Java设计模式之策略模式 博客分类: 设计模式more and morecommonjavajust do it java设计模式策略模式
-
Java I/O之Adapter模式 博客分类: Java JavaAdapterI/O适配器