装饰模式

2020-08-09  本文已影响0人  潜心之力

一、模式简介

定义:指在不改变现有对象结构的情况下,动态地给该对象增加功能,达到装饰效果。
场景:当终极类增加功能时不能采用继承方式。当对象的功能要求可以动态地添加,也可以再动态地撤销。

二、模式实现

以按键手机装饰后成为智能手机为例子

public interface Phone { -> 抽象构件
    void action();
}

public class KeyPhone implements Phone { -> 具体构件
    @Override
    public void action() {
        System.out.println("按键手机可以打电话");
    }
}

public abstract class Decorator implements Phone { -> 抽象装饰
    private Phone phone;

    public Decorator(Phone phone){
        this.phone = phone;
    }

    @Override
    public void action() {
        this.phone.action();
        this.decoration();
    }

    protected abstract void decoration();
}

public class SmartPhone extends Decorator { -> 具体装饰
    public SmartPhone(Phone phone) {
        super(phone);
    }

    @Override
    protected void decoration() {
        System.out.println("智能手机可以玩游戏");
    }
}

装饰前后效果对比

KeyPhone keyPhone = new KeyPhone();
keyPhone.action(); -> 装饰前的功能

SmartPhone smartPhone = new SmartPhone(keyPhone);
smartPhone.action(); -> 装饰后的功能
上一篇下一篇

猜你喜欢

热点阅读