跳转至

装饰器模式

1. 介绍

  装饰器模式(Decorator Pattern),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更灵活。

适用场景

  • 运行时,你需要动态地为对象增加额外职责时;
  • 当你需要一个能够代替子类的类,借助它提供额外方法时。

Decorate.class

package com.cmz.decorate;

/**
 * @author summer
 * @create 2020-03-06 12:10
 * 实现放大器对声音的功能
 */
public class Decorate {
    public static void main(String[] args) {
        Person p = new Person();
        p.say();

        //装饰
        Amplifer am = new Amplifer(p);
        am.say();
    }
}

interface Say{
    void say();
}

class Person implements Say{
    //属性
    private int voice = 10;
    @Override
    public void say() {
        System.out.println("人的声音大小为: " + this.voice);
    }

    public int getVoice() {
        return voice;
    }

    public void setVoice(int voice) {
        this.voice = voice;
    }
}

//放大器
class Amplifer implements Say{
    private Person person;
    Amplifer(Person person){
        this.person = person;
    }    @Override
    public void say() {
        System.out.println("扩音后人的声音大小为: " + person.getVoice()*100);
        System.out.println("我是新装饰的功能");
    }
}

运行结果

人的声音大小为: 10
扩音后人的声音大小为: 1000
我是新装饰的功能