【Java面试高频-设计模式】- Java装饰者模式是什么?

本文介绍了一种常用的设计模式——装饰者模式,通过实例演示如何为对象动态地添加职责,而不改变其结构。以饮料及其配料为例,展示了如何通过装饰者模式来扩展功能,并给出了一段完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰者模式(Decorator)

为对象动态添加功能。

class diagram

装饰者(Decorator)和具体组件(ConcreteComponet)都继承自组件(Component), 具体组件的方法实现不需要依赖与其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。

所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wxO7SB94-1620870970784)(imgs\132.png)]

实现:

设计不同种类的饮料,饮料可以添加配料,比如添加沙拉,牛奶。每增加一种配料,该饮料的价格就加1

组件

// 抽象接口饮料类
interface Drink{
	double cost();
}

具体组件

// 具体组件饮料1 
class Drink1 implements Drink{
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1;
	}
}

//具体组件饮料2 
class Drink2 implements Drink{
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1;
	}
}

装饰者

// 抽象的装饰者
abstract class MatrialDecorator implements Drink{
	protected Drink drink;
}

// 具体的装饰者1
class MilkMatrial extends MatrialDecorator{
	public MilkMatrial(Drink drink) {
		this.drink = drink;
	}
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1+drink.cost();
	}
	
}
class CoffeeMatrial extends MatrialDecorator{
	public CoffeeMatrial(Drink drink) {
		this.drink = drink;
	}
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1+drink.cost();
	}
	
}

测试

public class Test15 {
	public static void main(String[] args) {
		Drink drink = new Drink2();
		drink = new MilkMatrial(drink);
		drink = new CoffeeMatrial(drink);
		System.out.println(drink.cost());
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值