关闭

Java语言实现的装饰设计模式复习

标签: 设计模式
181人阅读 评论(0) 收藏 举报
分类:

1 装饰设计模式概述

(1)在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
(2)当想要对已有的对象进行功能增强时,可以定义一个类,将已有的对象传入,基于已有的功能来提供加强功能,这个自定义的类就被称为装饰类。装饰类通常会通过其构造方法接收被装饰类的对象,并基于被装饰类对象的功能提供更强的功能。

2 装饰设计模式特点

(1)装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
(2)装饰对象包含一个真实对象的引用(reference)。
(3)装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(4)装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

3 装饰设计模式演示

package captain;

//装饰设计模式演示。
public class DecoratorDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p = new Person();//创建被装饰类对象
		SuperPerson sp = new SuperPerson(p);//创建装饰类对象,将被装饰类对象作为参数
		sp.superEat();//装饰类对象调用装饰类中增强的方法
	}

}

//被装饰类
class Person{
	public void eat(){//被装饰类中的基本方法
		System.out.println("eat food");
	}
}

//装饰类
class SuperPerson{
	private Person p;//被装饰类的对象引用作为装饰类的成员变量
	SuperPerson(Person p){//将被装饰类对象作为参数传递给装饰类的构造函数
		this.p = p;
	}
	public void superEat(){//基于被装饰类中基本方法的增强方法
		p.eat();//被装饰类对象调用被装饰类中的基本方法
		System.out.println("drink wine");
	}
}
注意:装饰设计模式比继承要灵活,避免了继承体系的臃肿,并且降低了类与类之间的关系。Java I/O流中存在典型的装饰设计模式应用。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39201次
    • 积分:623
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条