`

第八章 装饰模式

阅读更多

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());
	}
}

 

  • 大小: 41 KB
  • 大小: 16 KB
分享到:
评论

相关推荐

    设计模式课程每章ppt(共27章).zip

    └── 设计模式 ├── 01_第1章_统一建模语言基础知识.ppt ├── 第10章_适配器模式.ppt ├── 第11章_桥接模式.ppt ├── 第12章_组合模式.ppt ├── 第13章_装饰模式.ppt ...├── 第8章_原型模式.ppt

    php设计模式介绍

    《PHP设计模式介绍》第八章 迭代器模式 《PHP设计模式介绍》第九章 观测模式 《PHP设计模式介绍》第十章 规范模式 《PHP设计模式介绍》第十一章 章代理模式 《PHP设计模式介绍》第十二章 装饰器模式 《PHP设计...

    C#设计模式 C# Design Patterns:A Tutorial

    第8章 简单工厂模式 第9章 工厂方法模式 第10章 抽象工厂模式 第11章 单件模式 第12章 生成器模式 第13章 原型模式 第三部分 结构型模式 第14章 适配器模式 第15章 桥接模式 第16章 组合模式 第17章 装饰模式 第18章...

    研磨设计模式(完整带书签).part2.pdf

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...

    java设计模式

    第8章 工厂方法模式 8.1 女娲造人的故事 8.2 工厂方法模式的定义 8.3 工厂方法模式的应用 8.3.1 工厂方法模式的优点 8.3.2 工厂方法模式的使用场景 8.4 工厂方法模式的扩展 8.5 最佳实践 第9章 抽象工厂模式 9.1 ...

    研磨设计模式(完整带书签).part1.pdf

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12章 职责链(chain of responsibility)模式 115 第13章 享元(flyweight)模式 122 第14章...

    Delphi模式编程第一分卷

    第8章 原型模式(Prototype) 8.1 模式解说 8.2 结构和用法 8.2.1 模式结构 8.2.2 代码模板 8.3 范例与实践 8.3.1 Delphi对象的克隆 8.3.2 用原型模式克隆字体 8.3.3 Delphi对象流化与原型模式 8.3.4 范例...

    Delphi模式编程第二分卷

    第8章 原型模式(Prototype) 8.1 模式解说 8.2 结构和用法 8.2.1 模式结构 8.2.2 代码模板 8.3 范例与实践 8.3.1 Delphi对象的克隆 8.3.2 用原型模式克隆字体 8.3.3 Delphi对象流化与原型模式 ...

    研磨设计模式-part2

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...

    研磨设计模式-part4

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...

    研磨设计模式-part3

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) ...

    研磨设计模式.part3(共4个)

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式...

    研磨设计模式.part2(共4个)

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式...

    研磨设计模式.part4(共4个)

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式...

    研磨设计模式.part1(共4个)

    第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式...

    Learning+PHP设计模式

    第8章 装饰器设计模式 第4部分 行为型设计模式 第9章 模板方法模式 第10章 状态设计模式 第5部分 MySQL和PHP设计模式 第11章 通用类负责连接,代理模式保证安全 第12章 策略设计模式的灵活性 第13章 职责链...

    ActionScript 3.0设计模式扫描版_方红琴译

    第8章 观察者模式 什么是观察者? 观察者模式中关键的00P概念 观察者模式最小化示例 实例:添加状态并标识用户 动态地改变状态 实例:采用不同的形式显示数据 小结 第9章 模板方法模式 什么是模板方法模式7...

    设计模式精解及面试攻略

    全书共9章,第1章全面概述本书主要内容,帮助读者理解;第2章介绍学习后续章节所必需的UML基本介绍和必要概念;...第8章包括常见的面试问题及实际示例;第9章涵盖Java面试问题和其他的一些概念,如MVC模式等。

    JavaScript模式中文[pdf] 百度云

    第1章 简介  模式  JavaScript:基本概念  ECMAScript 5  JSLint  Console ... 第8章 DOM和浏览器模式  关注分离  DOM脚本  事件  长期运行脚本  远程脚本  配置JavaScript  载入策略

Global site tag (gtag.js) - Google Analytics