设计模式之装饰着模式

什么是装饰着模式

Java23中设计模式之一,可以动态的给对象添加功能但又不改变对象的原有结构,或者可以理解为增强对象的方法;譬如克莱儿小姐要去约会,在约会前要先化妆,也就是要进行装饰和增强,这样在约会的过程中可以更加的美好。

装饰着模式的技术实现

实现思路及图解

现有两个对象分别为:被装饰对象A和装饰对象B,他们都实现了相同的接口C,在装饰对象B中获得被装饰兑现A的引用,这样就可以在B中对A对象的一些方法进行装饰或者说进行增强。《设计模式之装饰着模式》

代码实现

定义接口

创建谈恋爱的接口:FallInLove

/*
    创建恋爱接口
 */
public interface FallInLove {
    /**
     * 定义一个约会的抽象方法
     */
    public abstract void dating();
}

定义被装饰的对象

定义克莱儿对象,实现谈恋爱接口,重写约会方法,方法内容为今晚8点北京饭店约见男神

/**
 * 被装饰的对象:克莱儿
 */
public class Claire implements FallInLove {
    /**
     * 实现约会的方法:今晚8点北京饭店约见男神
     */
    @Override
    public void dating() {
        System.out.println("今晚8点北京饭店约见男神");
    }
}

定义装饰的对象

定义装饰克莱儿的对象,实现谈恋爱接口,并获得克莱尔对象的引用,重写约会的方法,方法的内容为6点钟先去美发店做个美发,化妆师化个妆,然后再8点北京饭店约见男神

/**
 * 装饰类
 */
public class DecorateClaire implements FallInLove {
    /**
     * 被装饰的对象的引用,因为被装饰的对象也实现了FallInLove接口,因此引用的类型声明为接口类型
     */
    private FallInLove fallInLoveObject;

    /**
     * 为了保证装饰对象中能够获得被装饰对象的引用,因此重载构造方法,需要传入被装饰的对象
     * @param fallInLoveObject:被装饰的对象,也就是本例中的克莱儿
     */
    public DecorateClaire(FallInLove fallInLoveObject) {
        this.fallInLoveObject = fallInLoveObject;
    }

    /**
     * 重写约会方法:增强实现
     */
    @Override
    public void dating() {
        //对克莱儿进行装饰
        System.out.println("6点钟先去美发店做个美发,化妆师化个妆");
        //让克莱儿去约会
        this.fallInLoveObject.dating();
    }
}

测试装饰结果

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        //创建克拉尔对象
        Claire claire = new Claire();
        //创建装饰着对象,构造方法中传入克莱儿对象
        DecorateClaire decorateClaire = new DecorateClaire(claire);
        //调用装饰对象中约会的方法
        decorateClaire.dating();
    }
}

运行结果:

6点钟先去美发店做个美发,化妆师化个妆
今晚8点北京饭店约见男神

总结:

装饰着模式能够动态的增强一个对象的功能,且无需改变对象的原有结构。装饰类和被装饰类可以独立发展,不会相互耦合。如果我们想在不增加很多子类的情况下扩展类,那么就可以使用装饰着模式。

    原文作者:I Java
    原文地址: https://blog.csdn.net/ZLX_508/article/details/89309345
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞