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

原创 2015年11月20日 16:33:43

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流中存在典型的装饰设计模式应用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

装饰模式的java实现例子

装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...
  • pnjlc
  • pnjlc
  • 2016年09月29日 15:00
  • 1987

JAVA设计模式初探之装饰者模式

这个模式花费了挺长时间,开始有点难理解,其实就是 定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。 设计初衷:通常...
  • jason0539
  • jason0539
  • 2014年04月01日 09:07
  • 74865

java二十三种设计模式------(一)装饰模式 装饰类VS子类继承

Decorator(装饰者模式),顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样。        因此,装饰器模式具有如下的特征: 1,它必须具有一个装饰的对象。(就如...
  • qiushi_1990
  • qiushi_1990
  • 2014年08月04日 14:11
  • 1203

Java语言实现的单例设计模式复习

1 单例设计模式概述 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。...
  • shangwei1991
  • shangwei1991
  • 2015年10月26日 22:22
  • 370

java语言实现结构型设计模式—适配器模式

一、描述 适配器模式就是讲一个系统的接口转换成另外一种形式,从而使原来不能直接调用的接口变得可以调用。例如我现在有一份List类型的用户名单,但是我的系统需要一份Map类型的用户名单,所以我就需要写...
  • tongyuehong
  • tongyuehong
  • 2015年05月04日 10:44
  • 683

大白话讲解设计模式之:代理模式 Java语言实现

通俗的例子解释代理模式
  • u012594358
  • u012594358
  • 2016年08月09日 12:00
  • 341

设计模式之单例模式java语言的实现

设计模式之单例模式的实现,编程语言是使用的java
  • liunian02050328
  • liunian02050328
  • 2017年04月25日 10:56
  • 165

java语言实现创建型设计模式—抽象工厂模式

一、描述 抽象工厂模式是在工厂方法的模式上进一步抽象而来,如果说工厂方法模式是对一个产品结构的创建而言的话,那么抽象工厂模式则是针对多个产品结构而言的,它被用来一次创建多个不同的产品对象。 我们要创建...
  • tongyuehong
  • tongyuehong
  • 2015年05月01日 11:42
  • 644

java语言实现创建型设计模式—单例模式

一、描述 单例模式就是确保一个类只有一个实例对象,并且在实例对象必须自动创建,对外不提供该对象的构造方法,并向整个系统提供该实例。使用单例模式相当于整个系统共用该类的实例对象,对于java中的并发访问...
  • tongyuehong
  • tongyuehong
  • 2015年05月02日 14:39
  • 839

java语言实现创建型设计模式—原型模式(Prototype)

一、描述 原型模式是通过一个原型对象来标明要创建的对象的类型,然后用复制这个原型对象的方法来拷贝创建更多的同类型对象。例如我们在程序的动态运行过程中有了一个对象,这个对象中包含了一系列的有效数据,我们...
  • tongyuehong
  • tongyuehong
  • 2015年05月01日 22:24
  • 963
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java语言实现的装饰设计模式复习
举报原因:
原因补充:

(最多只允许输入30个字)