设计模式-装饰模式

介绍

装饰模式可以动态地给一个对象添加一些额外地指责。

使用场景
需要透明且动态地扩展类的功能时。

优点
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点
多层装饰嵌套比较复杂。

UML类图

Decorator.jpg

代码实现

Role.java

public abstract class Role {

    public abstract int attack();
    
    public abstract int regeneration();
}

Hero.java

public class Hero extends Role {

    @Override
    public int attack() {
        return 100;
    }

    @Override
    public int regeneration() {
        return 10;
    }
}

Buff.java

public abstract class Buff extends Role {

}

RedBuff.java

public class RedBuff extends Buff {

    private Role role;
    
    public RedBuff(Role role) {
        this.role = role;
    }

    @Override
    public int attack() {
        return role.attack() + 50;
    }

    @Override
    public int regeneration() {
        return role.regeneration();
    }
}

BlueBuff.java

public class BlueBuff extends Buff {

    private Role role;
    
    public BlueBuff(Role role) {
        this.role = role;
    }

    @Override
    public int attack() {
        return role.attack();
    }

    @Override
    public int regeneration() {
        return role.regeneration() + 10;
    }
}

Main.java

public class Main {

    public static void main(String[] args) {
        Role hero = new Hero();
        System.out.println("Hero: Attack-" + hero.attack() + " Regeneration-" + hero.regeneration());
        Role redBuff = new RedBuff(hero);
        System.out.println("Hero With RedBuff: Attack-" + redBuff.attack() + " Regeneration-" + redBuff.regeneration());
        Role blueBuff = new BlueBuff(redBuff);
        System.out.println("Hero With RedBuff And BlueBuff: Attack-" + blueBuff.attack() + " Regeneration-" + blueBuff.regeneration());
    }
}

输出:

Hero: Attack-100 Regeneration-10
Hero With RedBuff: Attack-150 Regeneration-10
Hero With RedBuff And BlueBuff: Attack-150 Regeneration-20
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从今天开始呢,阿Q就带大家了解一下java的设计模式,并从中选出比较常用的几种设计模式进行总结。首先呢,先给大家说...
    阿Q说代码阅读 5,249评论 0 2
  • 模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,...
    lever_xu阅读 2,187评论 0 0
  • 需求 写一个给人模拟搭配不同服饰的程序,可以给人换各种各样的衣服裤子的形象。 初步实现 需求比较简单,直接上代码:...
    Mr丶sorrow阅读 4,114评论 0 2
  • 民国三十一年 三民小学 开学了要 四名“知识分子”聚聚气 揣着普及教育的理想 来到山区 贫瘠缺水 入不敷出为资金有...
    贺贺贺贺瑜婧啊阅读 3,508评论 0 1
  • 第一个5g网络出现,这个国家很特殊,我们也快了!网络的应用一直离不开三大运营商的存在,但是在速度方面,一直不能够给...
    娱乐1阅读 1,184评论 0 0

友情链接更多精彩内容