【Java面试高频-设计模式】- Java装饰者模式是什么?
发布日期:2021-06-29 15:36:51 浏览次数:2 分类:技术文章

本文共 1290 字,大约阅读时间需要 4 分钟。

装饰者模式(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;}// 具体的装饰者1class 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()); }}

转载地址:https://codingchaozhang.blog.csdn.net/article/details/116738153 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Java面试高频-设计模式】- Java代理模式是什么?
下一篇:【Java面试高频-设计模式】- Java责任链模式

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月06日 17时24分40秒