GOF 设计模式小白教程之装饰者模式

本贴最后更新于 1942 天前,其中的信息可能已经渤澥桑田

装饰者模式(Decorator)

定义:

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

通俗解释:

在很多网络游戏当中,武器都可以进行附魔。比如一把普通的刀。可以附魔火属性,也可以再附魔冰属性,还可以再附魔风属性。对于武器的附魔。相当于动态地给武器添加额外的功能。在装饰者模式中,被装饰的对象和装饰对象继承的是同一个接口,所以对象被装饰过后还是跟原来的对象接口一致,所以就可以不同组合的进行装饰。

代码:

抽象接口剑,拥有劈砍方法

public interface Sward {
    // 劈砍
    void chop();

}

钢剑实现了剑接口

public class IronSward implements Sward{

    @Override
    public void chop() {
        System.out.println("钢刀劈砍!");
    }

}

剑装饰器接口,通过实现剑的接口,并持有剑的对象。

public abstract class SwardDecorator implements Sward{

    protected Sward sward;

    public SwardDecorator(Sward sward) {
        this.sward = sward;
    }

}

具体的剑装饰器:火附魔、冰附魔、风附魔装饰器

public class FireSwardDecorator extends SwardDecorator {

    public FireSwardDecorator(Sward sward) {
        super(sward);
    }

    @Override
    public void chop() {
        sward.chop();
        System.out.print("附带火属性!");
    }

}
public class IceSwardDecorator extends SwardDecorator {

    public IceSwardDecorator(Sward sward) {
        super(sward);
    }

    @Override
    public void chop() {
        sward.chop();
        System.out.print("附带冰属性!");
    }

}

public class WindSwardDecorator extends SwardDecorator {

    public WindSwardDecorator(Sward sward) {
        super(sward);
    }

    @Override
    public void chop() {
        sward.chop();
        System.out.print("附带风属性!");
    }

}

测试装饰模式

public class TestDecorator {

    public static void main(String[] args) {

        Sward ironSward = new IronSward();

        // 进行火焰附魔
        Sward fire = new FireSwardDecorator(ironSward);
        // 进行冰霜附魔
        Sward ice = new IceSwardDecorator(fire);
        // 进行飓风附魔
        Sward wind = new WindSwardDecorator(ice);

        wind.chop();

    }

}

运行结果:

钢刀劈砍!
附带火属性!附带冰属性!附带风属性!

解析:

  1. 采用装饰模式扩展对象的功能比采用继承方式更加灵活。
  2. 可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...