设计模式-装饰者模式

基本介绍

动态的将新功能附加到对象上。
装饰模式是一种用于代替继承的技术 ,无须通过继承增加子类就能扩展对象的新功能。使用对象的	关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

角色

  • 1.抽象组件角色
  • 2.具体组件角色(真实角色)
  • 3.抽象装饰者角色
  • 4.具体装饰者角色

概念理解

这里以钢铁侠举例:
众所周知,在漫威中“富人靠科技,穷人靠变异",其中托尼▪斯塔克本身是个人类也就是抽象的组件角色;托尼▪斯塔克是具体的组件角色;我们都知道在漫威中这类人被称为超级英雄,那么这里超级英雄可以说是抽象的装饰者;而托尼又被称为“钢铁侠”,那么这里的钢铁侠就是具体的装饰者角色

实现

Human

/**
 * 抽象组件类
 */
public abstract class Human {

    //行为
    public abstract void behavior();

}

TonyStark

/** 具体组件类
 * date: 2023/8/3 21:30
 * author: MR.孙
 */
public class TonyStark extends Human{

    @Override
    public void behavior() {
        System.out.println("运用科技和财富拯救世界");
    }
}

Superhero

/** 抽象装饰着类
 * date: 2023/8/4 20:43
 * author: MR.孙
 */
public abstract class Superhero extends Human{

    private Human human;

    //获取被装饰对象
    public Superhero(Human human) {
        this.human = human;
    }

    @Override
    public void behavior() {
        //执行目标对象原本的行为
        human.behavior();
    }


}

IronMan

/** 具体装饰者类
 * 钢铁侠类
 * date: 2023/8/4 20:48
 * author: MR.孙
 */
public class IronMan extends Superhero{


    public IronMan(Human human) {
        super(human);
    }

    @Override
    public void behavior() {
        super.behavior();
        //增强目标对象的行为
        System.out.println("穿戴钢铁战衣拯救世界");
    }
}

测试

Test

public class Test {

    //最后我们通过装饰者模式,来模拟没有钢铁战衣的托尼斯塔克和有钢铁战衣的区别。
    public static void main(String[] args) {

        //创建托尼斯塔克对象
        TonyStark tonyStark = new TonyStark();
        //执行结果:
        //运用科技和财富拯救世界
        tonyStark.behavior();

        //通过装饰者模式使托尼斯塔克对象装饰成钢铁侠对象
        IronMan ironMan = new IronMan(tonyStark);
        //执行结果:
        //运用科技和财富拯救世界
        //穿戴钢铁战衣拯救世界
        ironMan.behavior();


    }
	~~~
posted @ 2023-08-04 21:03  长情c  阅读(21)  评论(0)    收藏  举报