美文网首页
Java 装饰模式

Java 装饰模式

作者: Yohann丶blog | 来源:发表于2020-09-05 10:18 被阅读0次
2020-09-04_5f51e9777d251.jpeg

介绍

装饰模式,可称为装饰器模式或修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。在原有的基础上进行功能增强。就功能而言,装饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。特点是用来增强原有对象功能,依附于原有对象。应用在用于需要对原有对象增加功能而不是完全覆盖的场景。

角色

角色 说明
Component 抽象构件
ConcreteComponent 具体构件
Decorator 抽象装饰类
ConcreteDecorator 具体装饰类

角色示例

类名 担任角色 说明
Soldier Component 士兵
LandSoldier ConcreteComponent 陆军
SeaSoldier ConcreteComponent 海军
SoldierArsenal Decorator 士兵军火库
M4a1 ConcreteDecorator M4a1枪支
Ak47 ConcreteDecorator Ak47枪支

UML类图

2020-09-04_5f51e8aa3d4aa.jpg

代码

abstract class Soldier {
    String weapon = "no weapon";

    public String getWeapon(){
        return weapon;
    }
}

class LandSoldier extends Soldier {
    public LandSoldier() {
        weapon = "+LandSoldier";
    }
}

class SeaSoldier extends Soldier {
    public SeaSoldier() {
        weapon = "+SeaSoldier";
    }
}

abstract class SoldierArsenal extends Soldier {
    public abstract String getWeapon();
}

class M4a1 extends SoldierArsenal {

    private Soldier soldier;

    public M4a1(Soldier s) {
        soldier = s;
    }

    @Override
    public String getWeapon() {
        return soldier.getWeapon() + "+with M4a1";
    }

}

class Ak47 extends SoldierArsenal {
    
    private Soldier soldier;

    public Ak47(Soldier s) {
        soldier = s;
    }

    @Override
    public String getWeapon() {
        return soldier.getWeapon() + "+with Ak47";
    }

}

public class SoldierTest {
    public static void main(String[] args) {
        Soldier s1 = new LandSoldier();
        System.out.println(s1.getWeapon());

        M4a1 s2 = new M4a1(s1);
        System.out.println(s2.getWeapon());

        Ak47 s3 = new Ak47(s2);
        System.out.println(s3.getWeapon());
    }
}

创建 SoldierTest.java,内容如上。

执行

$ javac SoldierTest.java
$ java SoldierTest
+LandSoldier
+LandSoldier+with M4a1
+LandSoldier+with M4a1+with Ak47

相关文章

  • 让你再也忘不了IO相关知识-Java IO图文详解

    1 装饰模式 Java中IO使用的是装饰模式,装饰模式在Android中很常见,比如系统的Context。 装饰模...

  • 装饰者模式

    在《JAVA与模式》一书开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装模式。装饰模式以对客户端...

  • 设计模式之装饰器模式

    在阎宏博士的《JAVA与模式》的书中,对装饰器模式的描述如下:装饰模式又名包装(Wrapper)模式。装饰模式以对...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • 设计模式 | 装饰者模式及典型应用

    前言 本文的主要内容: 介绍装饰者模式 示例 源码分析装饰者模式的典型应用Java I/O 中的装饰者模式spri...

  • Java设计模式之装饰器模式

    Java设计模式之装饰器模式 本文仅是个人观点,如有错误请指正 简介 装饰器模式(Decorator Patter...

  • java模式--装饰模式

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

  • 9、结构型模式之装饰模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapp...

  • 《java与设计模式》之装饰模式

    (转载)原文地址 在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又...

网友评论

      本文标题:Java 装饰模式

      本文链接:https://www.haomeiwen.com/subject/qebxektx.html