装饰者模式(Decorator Pattern)

2018-08-06  本文已影响0人  lxbnjupt

一、装饰者模式简介

1. 定义

装饰者模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构,该设计模式属于结构型模式。这种设计模式创建一个装饰类,用来包装原有的类,在装饰类中既可以调用待装饰类原有的方法,还可以增加新的方法,以扩充原有类的功能。因此,装饰者模式是一种用于替代继承的技术。

2. 模式组成

二、装饰者模式实现

这里以王者荣耀里面给英雄穿戴皮肤为例,如果英雄穿戴了皮肤,那么ta将会有一定的皮肤加成,也就是说会变得更强一些。具体,以百里守约说明一下:

/**
 * Component
 * 一个接口:英雄
 */
public interface Hero {
    public void skills();
}
/**
 * ConcreteComponent
 * 具体英雄:百里守约
 */
public class BailiShouYue implements Hero {
    @Override
    public void skills() {
        System.out.println("我瞄准很强!");
    }
}
/**
 * Decorator
 * 抽象装饰类:装饰英雄
 */
public class HeroDecorator implements Hero {

    protected Hero mHero;

    public HeroDecorator(Hero hero) {
        this.mHero = hero;
    }

    @Override
    public void skills() {
        mHero.skills();
    }
}
/**
 * ConcreteDecorator
 * 具体装饰类:穿戴皮肤
 */
public class SkinDecorator extends HeroDecorator {

    public SkinDecorator(Hero hero) {
        super(hero);
    }

    @Override
    public void skills() {
        super.skills();
        System.out.println("穿上「特工魅影」的我更强了!");
    }
}

测试代码如下:

private void testDecorator() {
        Hero bailiShouYue = new BailiShouYue();
        SkinDecorator skinDecorator = new SkinDecorator(bailiShouYue);
        skinDecorator.skills();
    }

输出结果:

我瞄准很强!
穿上「特工魅影」的我更强了!

三、优缺点

1. 优点

2. 缺点

上一篇 下一篇

猜你喜欢

热点阅读