Java 设计模式—装饰者模式

在Java编程语言中,嵌套了很多设计模式的思想,例如IO流中的缓冲流就使用到下面要介绍的装饰者设计模式。

示例代码:

 * 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类
 * @author Admin
 *
 */
public interface Drink {             //被装饰者的基类
	public String description();
	public int price();
}
/**
 * 具体构件角色:将要被附加功能的类,实现抽象构件角色接口
 * @author Admin
 *
 */
public class SoyaBeanMilk implements Drink{       //被装饰者的具体类

	public String description() {
		return "豆浆";
	}

	public int price() {
		return 2;
	}

}
/**
 * 抽象装饰者角色:持有对具体构件角色的引用(被装饰者)并实现抽象构件角色一致的接口
 * @author Admin
 *
 */
public class Decorator implements Drink{           //装饰者的基类
	private Drink drink;
	public Decorator(Drink drink) {
		this.drink = drink;
	}

	public String description() {
		return drink.description();
	}

	public int price() {
		return drink.price();
	}
}
/**
 * 具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能.
 * @author Admin
 *
 */
public class Sugar extends Decorator{       //装饰者具体类
	public Sugar(Drink drink) {
		super(drink);
	}
	public String description() {
		return super.description()+" 糖";
	}
	public int price() {
		return super.price()+1;
	}
}

/**
 * 具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能.
 * @author Admin
 *
 */
public class BlackBean extends Decorator{
	public BlackBean(Drink drink) {
		super(drink);
	}
	public String description() {
		return super.description()+" 黑豆";
	}
	public int price() {
		return super.price()+3;
	}

}
/**
 * 测试类(测试装饰者模式)
 * @author Admin
 *
 */
public class Test {

	public static void main(String[] args) {
		Drink drink = new SoyaBeanMilk();       //被装饰者(豆浆)
		System.out.println(drink.description()+"花费:"+drink.price());
		Drink drink1 = new Sugar(drink);        //糖是装饰者类,用来装饰豆浆
		System.out.println(drink1.description()+"花费:"+drink1.price());
		Drink drink2 = new BlackBean(drink);    //用黑豆来装饰豆浆
		System.out.println(drink2.description()+"花费:"+drink2.price());
		Drink drink3 = new BlackBean(drink1);   //用黑豆来装饰糖豆浆
		System.out.println(drink3.description()+"花费:"+drink3.price());
	}

}

实验结果:

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

时间: 2024-12-26 18:48:30

Java 设计模式—装饰者模式的相关文章

java设计模式------装饰着模式

java设计模式-------装饰者模式 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案.主要有组件(components)和装饰器(Decorator)组成.要求components和Decorator实现相同的接口或者抽象类(具体类的局限性太大). 设计原则.模式特点.适用性 - 1. 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用

Java设计模式——装饰者模式

JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构 图-装饰者模式结构图 Component : 定义一个对象接口,可以给这些对象动态地添加职责. interface Component {     public void operation(); } ConcreteComponent : 实现 Component 定义的接口. clas

java设计模式-装饰者模式

定义: 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 概述: 1.装饰者和被装饰对象有相同的超类型. 2.你可以用一个或多个装饰者包装一个对象. 3.既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装的)的场合 ,可以用装饰过的对象代替它. 4.装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的. 5.对象可以在任何时候被装饰,所以可以在运行时动态地.不限量地用你喜欢的装饰者

Java设计模式の装饰者模式

目录 一.问题引入 二.设计原则 三.用装饰者模式解决问题 四.装饰者模式的特点 五.装饰者模式的定义 六.装饰者模式的实现 七.java.io包内的装饰者模式 一.问题引入 咖啡店的类设计: 一个饮料基类,各种饮料类继承这个基类,并且计算各自的价钱. 饮料中需要加入各种调料,考虑在基类中加入一些布尔值变量代表是否加入各种调料,基类的cost()中的计算各种调料的价钱,子类覆盖cost(),并且在其中调用超类的cost(),加上特定饮料的价钱,计算出子类特定饮料的价钱. 缺点:类数量爆炸.基类加

java设计模式----装饰器模式

Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样.因此,装饰器模式具有如下的特征: 它必须具有一个装饰的对象. 它必须拥有与被装饰对象相同的接口. 它可以给被装饰对象添加额外的功能. 用一句话总结就是:保持接口,增强性能. 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种.它与对象的适配器模式的异同点如下. 相同点:都拥有一个目标对象. 不同点:适配器模式需要实现另外一个接口,而装饰器模式必须实

Java设计模式——装饰器模式(Decorator)

孙悟空有七十二般变化,他的每一种变化都给他带来一种附加本领.而不管孙悟空怎么变化在二郎神眼里,他永远是那只猢狲. 装饰器模式以对客户透明的方式动态的给一个对象附加上更多的责任. 在孙悟空的例子里,老孙变成的鱼儿相当于老孙的子类. 装饰模式的类图如下: 装饰模式的角色介绍: 抽象构件角色(ComponentDec):给出一个抽象接口,以规范准备接收附加责任的对象 具体构件(Concrete ComponentDec):定义一个将要接收附加责任的类 装饰角色(Decortor):持有一个构件对象的实

JAVA 设计模式 装饰者模式

用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构 图-装饰者模式 Component : 定义一个对象接口,可以给这些对象动态地添加职责. interface Component {    public void operation();} ConcreteComponent : 定义了一个具体的对象,也可以给这个对象添加一些职责. class ConcreteComp

设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 使用方法

装饰者模式(Decorator Pattern) Java的IO类 使用方法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716823 装饰者模式(decorator pattern)参见: http://blog.csdn.net/caroline_wendy/article/details/26707033 Java的IO类使用装饰者模式进行扩展, 其中FilterInputStream类, 就是装饰者(decora

设计模式---装饰者模式(学习笔记)

首先看装饰者模式的定义:动态的将责任附加到对象上.若要扩展功 能,装饰者提供了比继承更有弹性的替代方案! 先看看<大话设计模式>给出的类图: 实际上,装饰者模式就是:把装饰者对象当成"包装者",换言之,把要装饰的对象作为参数传递到装饰对象里去,然后进行操作.(如果理解不对,希望给指正),下面看代码来理解这个类图: 这是装饰者和需要装饰的具体对象共同的接口: public abstract class Component { abstract void Operation()