欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA设计模式(二)装饰者模式

程序员文章站 2022-05-30 12:06:49
...
装饰者模式动态地将责任附加到对象上。如要扩展功能,装饰者提供了比继承更有弹性的替代方案。

装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。

类图:

JAVA设计模式(二)装饰者模式
            
    
    博客分类: JAVA学习笔记 java设计模式

package com.zaxk.study.pattern;

/**
 * 装饰者模式
 * Created by ZhuXu on 2017/11/9 0009.
 */
public class DecoratorTest {

    public static void main(String[] args) {
        Food food = new PorkRib();
        food = new Vinegar(food);
        food = new Suger(food);
        System.out.println(food.getDesc());

        System.out.println(new Sauerkraut(new Fish()).getDesc());
    }
}

abstract class Food {
    String desc;

    String getDesc() {
        return desc;
    }
}

abstract class Condiment extends Food {
    abstract String getDesc();
}

class Fish extends Food {
    Fish() {
        desc = "鱼";
    }
}

class PorkRib extends Food {
    PorkRib() {
        desc = "排骨";
    }
}

class Suger extends Condiment {

    Food food;

    Suger(Food food) {
        this.food = food;
    }

    @Override
    String getDesc() {
        return "糖" + food.getDesc();
    }
}

class Vinegar extends Condiment {

    Food food;

    Vinegar(Food food) {
        this.food = food;
    }

    @Override
    String getDesc() {
        return "醋" + food.getDesc();
    }
}

class Sauerkraut extends Condiment {

    Food food;

    Sauerkraut(Food food) {
        this.food = food;
    }

    @Override
    String getDesc() {
        return "酸菜" + food.getDesc();
    }
}


JDK中已实现的装饰者模式:输入输出流。
new BufferedReader(new InputStreamReader(new FileInputStream(file)))
  • JAVA设计模式(二)装饰者模式
            
    
    博客分类: JAVA学习笔记 java设计模式
  • 大小: 25.3 KB
相关标签: java 设计模式